Web セッションでログインに関連するデータを保存して維持し、アプリケーションのほかのオブジェクトから必要に応じてこのデータを読み取る場合、外部 ID プロバイダーとして SOAP Web サービスを使用しても役に立ちません。
認証のために実装された .dll ファイルに、ユーザー認証のためのメソッドが 1 つ、アカウントの残高を表示するためのメソッドが 1 つあるとします。login メソッドで Web セッションを保存し、"ViewUserBalanceAccount" の実行時に読み取る必要があります。Web セッションは、Web サービスに保存した場合は維持されないので、この場合、Web サービスは役に立ちません。
この場合、
外部 Web サービス認証タイプではなく、GAM の認証タイプ: カスタムを使用し、外部プログラムを、SOAP サービスではなく、
GeneXus Access Manager を使用するアプリケーションと同じプラットフォームのプログラムにできます (GeneXus またはそれ以外を使用して開発した .dll、.rb、または .class を使用できます)。
GAM の認証タイプ: カスタムを使用した場合、プログラムの入力パラメーターと出力パラメーターの json 形式に応じて、次の 2 バージョンの外部プログラムがサポートされています:
これらのリンクから、必要なデータタイプを含む XPZ をダウンロードすることができます。
- 入力パラメーター: 文字列
json 形式の文字列であり、その構造が GAMWSLoginInSDT 構造化データタイプと同じである必要があります。
- 出力パラメーター: 文字列
json 形式の文字列であり、その構造が GAMWSLoginOutSDT 構造化データタイプと同じである必要があります。
これらのデータタイプの詳細については、「
外部認証タイプ: バージョン 1.0」または「
外部認証タイプ: バージョン 2.0」を、参照してください。
ルール:
Parm(in:&StrInput, out:&StrOutput); //&StrInput と &StrOutput は varchar(256)
ソースコード:
&Key = '03E1E1AAA5BCA19FBA8C42058B4ABF28'
&GAMWSLoginIn.FromJson(&StrInput) // &GAMWSLoginIn は &GAMWSLoginInSDT データタイプ
//パラメーターの復号化
&UserLogin = Decrypt64( &GAMWSLoginIn.GAMUsrLogin, &Key )
&UserPassword = Decrypt64( &GAMWSLoginIn.GAMUsrPwd, &Key )
&GAMWSLoginOut = New GAMWSLoginOutSDT() //&GAMWSLoginOut は &GAMWSLoginOutSDT データタイプ
&GAMWSLoginOut.WSVersion = GAMAutExtWebServiceVersions.GAM10
&GAMWSLoginOut.User = New GAMWSLoginOutUserSDT()
Do 'ValidUser'
&StrOutput = &GAMWSLoginOut.ToJson()
Sub 'ValidUser'
If &UserLogin = !"user"
If &UserPassword = !"password"
&GAMWSLoginOut.WSStatus = 1
&GAMWSLoginOut.User.Code = !"code"
&GAMWSLoginOut.User.FirstName = !"FirstName"
&GAMWSLoginOut.User.LastName = !"LastName"
&GAMWSLoginOut.User.EMail = !"name2@domain.com"
Do 'GetRoles' //オプション
Else
&GAMWSLoginOut.WSStatus = 3
EndIf
Else
&GAMWSLoginOut.WSStatus = 2
EndIf
EndSub
Sub 'GetRoles'
&GAMWSLoginOutUserRol = New()
&GAMWSLoginOutUserRol.RoleCode = "role_1"
&GAMWSLoginOut.User.Roles.Add(&GAMWSLoginOutUserRol)
&GAMWSLoginOutUserRol = New()
&GAMWSLoginOutUserRol.RoleCode = "role_2"
&GAMWSLoginOut.User.Roles.Add(&GAMWSLoginOutUserRol
EndSub
"カスタム認証" タイプである必要があります。
Java の例
.Net の例
図 1 に示すように、外部認証プログラムのデータを指定する必要があります。
Function: 外部プログラムを認証とオーソライズの両方に使用するかどうかを指定します。 [ Authentication and Roles ] を指定する場合は、「
外部認証プログラムによるロールの管理」を参照してください。
JSON version: 外部プログラムのバージョン (1.0 または 2.0) を指定します。
Private encryption key: GeneXus 外部認証プログラムを使用する場合は、暗号化キーが便利です。Encrypt64 関数を使用して、ユーザー名とパスワードがプログラムに渡されるときに暗号化されます。ここには、外部プログラムで、ユーザーとパスワードの復号化に使用する暗号化キーを設定します。
File name: 外部プログラムに対応するファイルの名前を指定します (dll/jar/class/rb)。Java の場合はオプションです。
Package: ここには、Java モデルの場合は
[ Java Package Name ] プロパティと同じ値、.NET モデルの場合は
[ Net Application namespace ] プロパティの値、Ruby の場合はコードの名前空間を指定します。
このプロパティはオプションであり、外部プログラムそのパッケージがあるかどうかによって異なります。
Class name: このフィールドは必須です。ここには、外部プログラムのクラス名を指定します。
認証タイプの追加と更新のコード例については、GAM Backoffice に含まれるサンプルオブジェクト GAMExampleEntryAuthenticationType を参照してください。
SDActions 外部オブジェクト の LoginExternal メソッドを使用します。メソッドに送信する最初のパラメーターは "Custom" です。
Event 'ExternalLogin'
Composite
GeneXus.SD.Actions.LoginExternal(GAMAuthenticationTypes.Custom, &User, &Password)
Return
EndComposite
EndEvent
次のコードは、Web アプリケーションにおけるカスタム外部ログインの実行例を示しています。
Web パネルの場合、GAMRepository オブジェクトの Login メソッドを使用します。使用する AuthenticationType を指定するには、GAMLoginAdditionalParameters の変数を定義する必要があります。
GAMExampleLogin Web パネル (
GAM Examples 内) で、このコードを例として使用しています:
&AdditionalParameter.AuthenticationTypeName = &LogOnTo //&LogOnTo は、使用したい認証タイプをユーザーが選択するコンボボックスです。// これは認証タイプの名前です。図 1 の例を使用した場合、"custom1.0testjava" になります。&LoginOK = GAMRepository.Login(&UserName, &UserPassword, &AdditionalParameter, &Errors )//&Errors は GAMError のコレクション
1.外部プログラムが GeneXus を使用して開発されている場合、"execute" というメソッドがあります。
プログラムが GeneXus 以外のツールを使用して開発されている場合、認証に任意のメソッドを使用できます。この場合、カスタム認証タイプを定義するときに、次のコード行でメソッド名を宣言する必要があります:
&AuthenticationTypeCustom.Custom.Method = "myauthenticationmethod" //&AuthenticationTypeCustom は GAMAuthenticationTypeCustom データタイプ
完全なコード例については、サンプルオブジェクト GAMExampleEntryAuthenticationType (
GAM Examples 内) を参照してください。
2."Custom" 認証タイプは、各 GAM リポジトリに対して 1 つだけ定義できます。