概要
インターセプト スクリプトを使用して、認証、承認などのカスタム ビジネス ロジックをアップグレードに対応した方法で実装でき、Gluu サーバー コードをフォークする必要はありません。スクリプトの各タイプは、Java インターフェイスによって記述されますのでメソッドが必要になります。
カスタム スクリプトの Web インターフェイスにアクセスするには、Configuration > Person Authentication Scripts、もしくは、Other Custom Scriptsに移動します。
Jython
インターセプト スクリプトは Jython で記述されているため、Java または Python クラスをインポートできます。
スクリプトの構文には Python が必要ですが、ほとんどの機能は Java で記述できます。 Python クラスをインポートする場合は、”純粋な Python” でなければなりません。 例えば、C ライブラリをラップするクラスはインポートできません。
メソッド
基本のインターフェイスを継承する3つのメソッドは以下の通りです。
継承されたメソッド |
メソッドの説明 |
def init(self, customScript, configurationAttributes) |
このメソッドは、スクリプトの初期化中に 1 回だけ呼び出されます。 グローバルスクリプトの初期化、オブジェクトの開始などに使用できます |
def destroy(self, configurationAttributes) |
このメソッドは、イベントを破棄するために 1 回呼び出されます。 init() メソッドで作成されたリソースとオブジェクトを解放するために使用できます |
def getApiVersion(self, configurationAttributes, customScript) |
getApiVersion メソッドを使用すると、古いスクリプトから新しい API への透過的な移行を行うために API を変更できます。 getApiVersion の値が 10 より大きい場合にのみ、customScript 変数を含めます。 |
configurationAttributes パラメーターは java.util.Map<String, SimpleCustomProperty> で、プロパティは oxConfigurationProperty 属性で指定されています。
スクリプト マネージャーは、有効なスクリプトのみをロードします。 したがって、スクリプトを有効または無効にした後、スクリプト マネージャーは、スクリプトをそれぞれロードまたは破棄するイベントをトリガーする必要があります。 すべてのスクリプトは LDAP の ou=scripts,o=<org_inum>,o=gluu ブランチに保存されます。
入力例を以下に示します。
dn: inum=@!1111!031C.4A65,ou=scripts,o=@!1111,o=gluu objectClass: oxCustomScript objectClass: top description: <custom_script_description> displayName: <display_name> gluuStatus: true inum: @!1111!031C.4A65 oxLevel: <priority> oxModuleProperty: {“value1″:”module_property_name”,”value2″:”module_property_value”,”description”:””} oxConfigurationProperty: {“value1″:”configuration_property_name”,”value2″:”configuration_property_value”,”description”:””} oxRevision: <revision> oxScript: <custom_script> oxScriptType: <script_type> programmingLanguage: python |
スクリプト マネージャーは、oxRevision が増加すると、アプリケーションを再起動する必要なく、スクリプトを自動的に再読み込みします。
スクリプトの命名
新しいカスタム スクリプトには、説明的な displayName を指定する必要があります。これは、oxTrust にリストされている方法です。 displayNameは 60 文字に制限されています。
※各 Person Authentication script (個人認証スクリプト)に付けられた名前は、その OpenID Connect acr_value としても使用されます。 詳細については、OpenID Connect docs のドキュメントをご覧ください。
ログ
インターセプト スクリプトに関するログ ファイルは、oxauth.log ファイルに保存されます。 ログは、影響を受けるモジュールに従って分けられます。 oxAuth カスタム スクリプト ログは oxauth_script.logに保存され、oxTrust カスタム スクリプト ログは oxtrust_script.logに保存されます。 これらのログ ファイルを参照して、インターセプト スクリプトのエラーをトラブルシューティングするか、スクリプトのワークフローに従ってください。
- PYTHON_HOME 環境変数が設定されていない場合、一部の環境では print ステートメントが機能しない場合があります。 有効な python インストールを指していることを確認してください。
ログの詳細については、ドキュメントの Log Management の部分を参照してください。
デバッグ
スクリプトを開発したら、デバッグする必要があります。 詳細については、 debugging tutorialを確認してください。
Person Authentication(本人認証)
認証スクリプトを使用して、複雑な複数ステップの多要素認証ワークフローを実装できます。
各スクリプトでは、認証の手順とメカニズムが定義され、外部 API を呼び出すことができ、コンテキスト要因に基づいてユーザー エクスペリエンスを動的に調整できます。 例えば、ステップ 1 で不正検出 API を呼び出すことが可能です。 許容できないリスクを示している場合、ステップ2の手順を追加して、より強力な認証資格情報をユーザーに要求することができます。
認証傍受スクリプトは、init、destroy、および getApiVersion のメソッドを使用してベース スクリプト タイプを拡張し、さらに以下を追加します。
メソッド |
isValidAuthenticationMethod(self, usageType, configurationAttributes) |
説明 |
このメソッドは、認証方法が有効な状態にあるかどうかを確認するために使用されます。 例えば、ユーザーを認証するためにサードパーティのメカニズムが利用可能かどうかを確認できます。 結果として、True または False を返します。 |
メソッドパラメータ |
usageTypeは、 org.gluu.model.AuthenticationScriptUsageType ConfigurationAttributesは、 java.util.Map<String, SimpleCustomProperty> |
メソッド |
def getAlternativeAuthenticationMethod(self, usageType, configurationAttributes) |
説明 |
このメソッドは、現在の認証方法が無効な状態にある場合にのみ呼び出されます。 したがって、オーセンティケーターは isValidAuthenticationMethod が False を返す場合にのみそれを呼び出します。 結果として、予約済みの認証方法名を返します。 |
メソッドパラメータ |
usageType は、org.gluu.model.AuthenticationScriptUsageType configurationAttributesは、java.util.Map<String, SimpleCustomProperty> |
メソッド |
def authenticate(self, configurationAttributes, requestParameters, step) |
説明 |
このメソッドは、個人認証スクリプト内のキーメソッドです。 ユーザーが指定されたステップを通過したかどうかをチェックします。 結果として、True または False を返します。 |
メソッドパラメータ |
requestParameters は、java.util.Map<String, String[]> step は、 java 整数 configurationAttributes :は、java.util.Map<String, SimpleCustomProperty> |
メソッド |
def prepareForStep(self, configurationAttributes, requestParameters, step) |
説明 |
このメソッドを使用して、ログイン ページのレンダリングに必要な変数を準備し、それらを適切なイベント コンテキストに格納できます。 結果として、True または False を返す必要があります。 |
メソッドパラメータ |
requestParameters は、java.util.Map<String, String[]> stepjは、java 整数 configurationAttributes は、java.util.Map<String, SimpleCustomProperty> |
メソッド |
def getCountAuthenticationSteps(self, configurationAttributes) |
説明 |
このメソッドは、認証ワークフローのステップ数を示す整数値を返します。 |
メソッドパラメータ |
configurationAttributesは java.util.Map<String, SimpleCustomProperty> |
メソッド |
def getExtraParametersForStep(self, configurationAttributes, step) |
説明 |
このメソッドは、指定されたイベント コンテキスト パラメーターイベントを oxAuth セッションに保存する必要があることをオーセンティケーターに通知する方法を提供します。 たとえば、認証スクリプトがユーザーをサードパーティの認証システムにリダイレクトし、その後ワークフローが再開されることを期待する場合など、いくつかのケースで必要になります。 結果として、文字列の Java 配列を返します。 |
メソッドパラメータ |
configurationAttributesは、java.util.Map<String, SimpleCustomProperty> stepは java整数 |
メソッド |
def getPageForStep(self, configurationAttributes, step) |
説明 |
このメソッドにより、管理者は指定された認証ステップに必要なページをレンダリングできます。 XHTML ページへのパスを含む文字列値を返す必要があります。 戻り値が空または null の場合、オーセンティケーターはデフォルトのログをページ /login.xhtml にレンダリングする必要があります。 |
メソッドパラメータ |
configurationAttributes : java.util.Map<String, SimpleCustomProperty> stepは、java整数 |
メソッド |
def logout(self, configurationAttributes, requestParameters) |
説明 |
このメソッドは必須ではありません。これは、oxAuth が /oxauth/logout.htm エンドポイント (通常の end_session エンドポイントと同じパラメーター セットを受け取る) へのセッション終了要求を受信したときに、認証スクリプトで特定のログアウト ロジックを実行する必要がある場合に使用できます。このメソッドは True または False を返します。( Falseの場合は、 oxAuth がセッション終了要求ワークフローの処理を停止します。)
このスクリプトに対して getApiVersion() が”3”を返す場合、logout() は、Gluu サーバーでセッションを終了する前に、サードパーティ サービスで外部の終了セッション API を呼び出します。そのためには、getLogoutExternalUrl() メソッドを呼び出し、そのメソッドによって返された URL にユーザー エージェントをリダイレクトします (この時点では、Gluu のセッションはまだ強制終了されていないことに注意してください)。サードパーティ サービスがセッション終了ルーチンを完了した後、空の URL クエリ文字列を使用してユーザーを /oxauth/logout.htm に再度リダイレクトする必要があります。これは、oxAuth がそれを拡張ログアウト フローの継続として認識するのに十分です。元の URL クエリ文字列を復元し、ユーザーを /oxauth/end_session に送信して完了させます。 |
Gluu サーバーの展開には、すぐに使用できる多数の認証スクリプトが事前に導入されています。 詳細については、認証ガイドをご覧ください。
同意収集 (Consent Gathering)
OAuth 2.0 を使用すると、プロバイダーは、個人情報をクライアント (アプリケーション) に公開する前に、ユーザーに同意を求めることができます。 標準的な同意プロセスは、承認または拒否の二者択一です。 同意収集傍受スクリプトを使用すると、同意フローをカスタマイズして、固有のビジネス要件を満たすことができます。例えば、支払い承認をサポートする場合、トランザクション情報を提示する必要がある場合、またはセキュリティを追加するために認証を強化する必要がある場合です。
以下に示すように、oxTrust UI を介して同意収集を有効にすることができます。
同意収集スクリプトを実行するには、クライアントに関連付ける必要があります。 それ以外の場合は、consentGatheringScriptBackwardCompatibilityグローバル AS 構成プロパティを true に設定できます。この場合、AS はより高いレベルのスクリプトをグローバルに検索します (クライアント構成は無視されます)。
ユーザーは以下の様な同意を求める画面が表示されます。
Post Authn
ブラウザーがセッションを確立した後、ユーザーが Web サイトにアクセスすると、RP は、ユーザーが認証または承認することなくコードを取得できます。 場合によっては、認証エンドポイントからコードまたはトークンを付与する前に、カスタム ビジネス ロジックを挿入することが望ましい場合があります。 Post Authn スクリプトを使用すると、再認証または再承認を強制できます (クライアントが「事前承認済み」またはクライアント承認の永続性がオンの場合でも)。
以下に示すように、oxTrust UI を介して同意収集を追加し、RP のクライアントに追加できます。
Post Authn スクリプトをクライアントに関連付ける (変更を保持するには、[更新] ボタンをクリックする必要があります。)
ユーザーの更新
oxTrust を使用すると、管理者はグループに属するユーザーを追加および変更できます。 このプロセスを簡素化し、繰り返しアクションを適用するために、oxTrust は Update User スクリプトをサポートしています。 このスクリプトでは、個人エントリをデータベースに保存する前に変更できます。
このスクリプト タイプは、ベース スクリプト タイプにメソッドを 1 つのみ追加します。
メソッド |
def updateUser(self, user, persisted, configurationAttributes) |
説明 |
このメソッドは、ユーザーを更新します。 |
メソッドパラメータ |
Userは、org.gluu.oxtrust.model.GluuCustomPerson persistedは、操作タイプ(追加/変更)を指定するブール値 configurationAttributes は、java.util.Map<String, SimpleCustomProperty>
|
このスクリプトはoxTrustアプリケーションでのみ使用可能です。
ユーザーの登録
oxTrust を使用すると、ユーザーは自己登録を実行できます。 ユーザー登録を制御/検証するために、ユーザー登録スクリプト タイプがあります。
このスクリプト タイプは、ベース スクリプト タイプに 3 つのメソッドを追加します。
メソッド |
def initRegistration(self, user, requestParameters, configurationAttributes) def preRegistration(self, user, requestParameters, configurationAttributes) def postRegistration(self, user, requestParameters, configurationAttributes) |
説明 |
このメソッドは、カスタム プロパティの値に基づいてユーザー アカウントを有効/無効にします。 |
メソッドパラメータ |
Userは、org.gluu.oxtrust.model.GluuCustomPerson requestParametersは、java.util.Map<String, String[]> configurationAttributes は、java.util.Map<String, SimpleCustomProperty>
|
カスタムプロパティ |
enable_user–>初期値false |
説明 |
このユーザー アカウントが Gluu Server CE インスタンスにログインする準備ができているかどうかを制御します。 |
メソッドは次の順序で実行されます。
順序 |
メソッド |
期待されるリターン |
1 |
initRegistration() |
True/False |
2 |
preRegistration() |
True/False |
3 |
postRegistration() |
True/False |
まず、oxTrust は initRegistration メソッドを実行して、初期ユーザー エントリの更新を行います。 preRegistration メソッドは、ユーザー エントリをデータベースに格納する前に呼び出されます。 したがって、このスクリプトでは、ユーザー エントリを検証できます。 postRegistration メソッドは、ユーザー エントリがデータベースに正常に保存された後に呼び出されます。 この方法では、たとえば、スクリプトは電子メールを送信したり、新しいユーザー エントリについて他の組織システムに通知を送信したりできます。
クライアントの登録
oxAuth は、OpenID Connect 動的クライアント登録仕様を実装しています。 新しいクライアントはすべて、パスワードとクライアント ID を除いて、デフォルトのアクセス範囲と属性が同じです。 クライアント登録スクリプトを使用すると、管理者はこの制限を変更できます。 このスクリプトでは、登録要求を取得して分析し、登録済みクライアントにカスタマイズを適用できます。 たとえば、redirect_uri が指定されたサービスまたはドメインに属している場合、スクリプトは指定されたスコープへのアクセスを許可できます。
このスクリプト タイプは、ベース スクリプト タイプにいくつかのメソッドを追加します。
メソッド |
def createClient(self, registerRequest, client, configurationAttributes) |
メソッドパラメータ |
registerRequest は、org.gluu.oxauth.client.RegisterRequest clientは、org.gluu.oxauth.model.registration.Client configurationAttributes は、java.util.Map<String, SimpleCustomProperty> |
メソッド |
def updateClient(self, registerRequest, client, configurationAttributes) |
メソッドパラメータ |
registerRequest は、org.gluu.oxauth.client.RegisterRequest clientは、org.gluu.oxauth.model.registration.Client configurationAttributes は、java.util.Map<String, SimpleCustomProperty> |
メソッド |
def getSoftwareStatementHmacSecret(self, context) |
メソッドパラメータ |
context は、 org.gluu.oxauth.service.external.context.DynamicClientRegistrationContext (https://github.com/GluuFederation/oxauth project ) |
メソッド |
def getSoftwareStatementJwks(self, context) |
メソッドパラメータ |
context は、 org.gluu.oxauth.service.external.context.DynamicClientRegistrationContext (https://github.com/GluuFederation/oxauth project ) |
このスクリプトは、oxAuth アプリケーションでのみ使用できます。
ダイナミックスコープ
ダイナミック スコープのカスタム スクリプトを使用すると、要求しているクライアントの ID、ログに記録されたユーザーのセッション パラメーター、他のユーザーの属性の値、特定のビジネス ロジックを実装する計算の結果などの状況に応じて、クレーム (およびその値) のリストをオンザフライで生成できます。 /またはリモート API またはデータベースへのリクエスト。 その後、userinfo endpointへの呼び出しに対する応答として、通常の方法でクレームが返されます。
2 つのパラメーターがスクリプトに渡されます。
- dynamicScopeContext:
org.gluu.oxauth.service.external.context.DynamicScopeExternalContext class
- configurationAttributes:
java.util.Map dictionary carring script’s custom properties
動的スコープを構成するには、次の手順が必要です:
- 動的スコープのカスタム スクリプトは、”Other custom scripts” ページの “Dynamic scopes” タブで構成し、有効にする必要があります。
- “OpenID Connect -> Scopes” ページでスコープを定義する必要があります。
- スコープのタイプは”Dynamic”に設定する必要があります。
- 対応する動的スクリプトをそのスコープにリンクする必要があります ([動的スクリプトの追加] ボタン)。
- スコープは、”OpenID Connect -> Clients” ページで (“Add Scope”ボタンを使用して) それを使用するクライアントに追加する必要があり、スコープはクライアントによって”scope=” URL クエリ パラメーターに含まれる必要があります。
スコープの追加に関する詳細な説明は、Openid スコープ
https://gluu.org/docs/gluu-server/4.4/admin-guide/openid-connect/#scopes
にあります。
ID Generator
デフォルトでは、oxAuth/oxTrust は内部メソッドを使用して、新しい個人/クライアントなどのエントリの一意の識別子を生成します。 ほとんどの場合、ID の形式は次のとおりです。
‘!’ + idType.getInum() + ‘!’ + four_random_HEX_characters + ‘.’ + four_random_HEX_characters.
ID 生成スクリプトを使用すると、管理者はカスタム ID 生成ルールを実装できます。
このスクリプト タイプは、ベース スクリプト タイプにメソッドを 1 つだけ追加します。
メソッド |
def generateId(self, appId, idType, idPrefix, configurationAttributes) |
メソッドパラメータ |
appIdは、 application ID idTypeは、ID Type idPrefixは、 ID Prefix userは、org.gluu.oxtrust.model.GluuCustomPerson configurationAttributesは、java.util.Map<String, SimpleCustomProperty> |
このスクリプトは、oxTrust アプリケーションでのみ使用できます。
Cache Refresh
Gluu インスタンスを既存のネットワーク環境で認証を処理するバックエンド LDAP サーバーと統合するために、oxTrust はキャッシュ リフレッシュと呼ばれるメカニズムを提供し、ユーザー データを Gluu サーバーのローカル LDAP サーバーにコピーします。 このプロセス中に、キー属性を指定し、属性名の変換を指定できます。 また、属性値を上書きしたり、他の属性値に基づいて新しい属性を追加したりするために使用できる場合もあります。
このスクリプト タイプは、ベース スクリプト タイプにメソッドを 1 つだけ追加します。
メソッド |
def updateUser(self, user, configurationAttributes) |
メソッドパラメータ |
userは、org.gluu.oxtrust.model.GluuCustomPerson configurationAttributesは、java.util.Map<String, SimpleCustomProperty> |
このスクリプトは、oxTrust アプリケーションでのみ使用できます。
UMA 2 RPT 承認ポリシー
これは、UMA 用の特別なスクリプトです。 これにより、管理者は UMA スコープをポリシーで保護できます。 複数の UMA ポリシーを UMA スコープに追加することができます。 指定されたリソースへのアクセスを要求する際、アプリケーションは指定された UMA ポリシーを呼び出して、アクセスを許可または拒否する必要があります。
このスクリプト タイプは、ベース スクリプト タイプにメソッドを 1 つだけ追加します。
メソッド |
def authorize(self, authorizationContext, configurationAttributes) |
メソッドパラメータ |
authorizationContextは、 org.gluu.oxauth.service.uma.authorization.AuthorizationContext configurationAttributesは、java.util.Map<String, SimpleCustomProperty> |
このスクリプトは、oxAuth アプリケーションでのみ使用できます。
UMA 2 RPT クレーム
これは、UMA 用の特別なスクリプトです。 これにより、管理者は UMA スコープをポリシーで保護できます。 複数の UMA ポリシーを UMA スコープに追加することができます。 指定されたリソースへのアクセスを要求する際、アプリケーションは指定された UMA ポリシーを呼び出して、アクセスを許可または拒否する必要があります。
このスクリプト タイプは、ベース スクリプト タイプにメソッドを 1 つだけ追加します。
UMA 2 クレーム収集
これは、UMA 2 用の特別なスクリプトです。これにより、管理者は追加のクレームを収集するためのロジックをコーディングできます (UMA RPT 承認ポリシーで必要)。
このスクリプトは、oxAuth アプリケーションでのみ使用できます。
アプリケーション セッション管理
このスクリプトを使用すると、管理者はさまざまなセッション ライフタイム イベントに関する通知を受け取ることができます。 このタイプでは、複数のスクリプトを追加できます。 アプリケーションは、レベルに従ってそれらすべてを呼び出す必要があります。
このスクリプトには次のメソッドがあります。
- startSession – アプリケーションは、セッション開始要求 (作成) でそれを呼び出し、サード パーティ システムに通知できるようにします。
- endSession – このメソッドは、end_session エンドポイントへの oxAuth 呼び出しによってトリガーされます。
- onEvent – さまざまなセッション イベントで呼び出されます。 イベントの種類: AUTHENTICATED、UNAUTHENTICATED、UPDATED (更新が永続的にプッシュされる)、GONE (タイムアウト、期限切れ、または /end_session エンドポイントによって終了される可能性)
このスクリプトは、oxAuth アプリケーションでのみ使用できます。
SCIM
SCIM スクリプトを使用すると、特定の SCIM API 操作が呼び出されたときにカスタム ロジックを実行できます。 詳細については、SCIM custom scriptsページを参照してください。
イントロスペクション
RFC では、クライアント資格情報を使用してイントロスペクション・エンドポイントを認証しなければならないことが明記されています。イントロスペクション スクリプトを使用すると、イントロスペクション エンドポイント (OAuth 2.0 Token Introspection*) の応答を変更できます。
RFC 7662: OAuth 2.0 Token Introspection (rfc-editor.org)
*この仕様は、保護されたリソースが OAuth 2.0 認可サーバーにクエリを実行して、OAuth 2.0 トークンのアクティブ状態を判断し、このトークンに関するメタ情報を判断する方法を定義します。
OAuth 2.0 デプロイメントでは、このメソッドを使用して、トークンの承認コンテキストに関する情報を承認サーバーから保護されたリソースに伝えることができます。
イントロスペクション スクリプトを実行するには、(トークンの取得に使用される) クライアントに関連付ける必要があります。 それ以外の場合は、introspectionScriptBackwardCompatibility グローバル AS 構成プロパティを true に設定できます。この場合、AS はすべてのスクリプトを実行します (クライアント構成を無視します)。
イントロスペクション インターセプト スクリプトは、init、destroy、および getApiVersion メソッドを使用してベース スクリプト タイプを拡張しますが、次のメソッドも追加します。
メソッド |
def modifyResponse(self, responseAsJsonObject, context) |
メソッドパラメータ |
responseAsJsonObjectは、 org.codehaus.jettison.json.JSONObject contextは、org.gluu.oxauth.service.external.context.ExternalIntrospectionContext |
access_token の作成中にJWT としてイントロスペクション スクリプトを実行することもできます。
これは、デフォルトでfalse に設定されている以下のクライアント プロパティによって制御可能です。
run_introspection_script_before_access_token_as_jwt_creation_and_include_claims
上記クライアントプロパティを true に設定し、access_token_as_jwt を true に設定すると、JWT (access_token) が作成される前にイントロスペクション スクリプトが実行され、すべての JSON 値が JWT に転送されます。
また、スクリプト内の contextには、必要に応じてクレームの転送をキャンセルできる追加のメソッドがあります context.setTranferIntrospectionPropertiesIntoJwtClaims(false)
トークンの取り消し
トークンの取り消しスクリプトを使用すると、トークンの取り消し中にカスタム ロジックを挿入できます。
注 RevokeTokenContext を使用すると、必要に応じて顧客の応答を許可する応答ビルダー (context.getResponseBuilder()) にアクセスできます。
セッションの終了 (ログアウト)
OpenID Connect 1.0 は、OAuth 2.0 プロトコルの上にある単純な ID レイヤーです。 これにより、クライアントは、承認サーバーによって実行される認証に基づいてエンドユーザーの身元を確認し、相互運用可能な REST のような方法でエンドユーザーに関する基本的なプロファイル情報を取得できます。
この仕様は、ログアウトされる OP と RP の間のユーザー エージェントを介したフロントチャネル通信を使用するログアウト メカニズムを定義します。このメカニズムは、Relying Party ページで OpenID プロバイダーの iframe を必要としません。 他のプロトコルは、これを達成するためにログイン状態をクリアする RP URL に HTTP GET を使用しています。 この仕様は同じことを行います。
セッション終了スクリプトを使用すると、Frontchannel ログアウト (上記) の HTML 応答を変更できます。
End Session インターセプト スクリプトは、init、destroy、および getApiVersion メソッドを使用してベース スクリプト タイプを拡張しますが、次のメソッドも追加します。
メソッド |
def getFrontchannelHtml(self, context) |
メソッドパラメータ |
contextは、 org.gluu.oxauth.service.external.context.EndSessionContext |
リソース所有者のパスワード認証情報
Resource Owner Password Credentials スクリプトを使用すると、Resource Owner Password Credentials Grant の動作を変更できます。
スクリプトは通常の認証後に呼び出され、現在の結果をそのままにするか変更することができます – 認証されていない場合は認証します – True を返し、オプションでユーザーを設定します (context.setUser(user) を介して)。
このスクリプトは、init、destroy、および getApiVersion メソッドを使用してベース スクリプト タイプを拡張しますが、次のメソッドも追加します。
メソッド |
def authenticate(self, context) |
メソッドパラメータ |
contextは、 org.gluu.oxauth.service.external.context.ExternalResourceOwnerPasswordCr edentialsContext |
永続性拡張
管理者は、ローカル データベースでユーザーのパスワードをエンコードするために使用されるハッシュ アルゴリズムを指定できます。
メソッド |
def createHashedPassword(self, credential) |
説明 |
パスワードを指定すると、そのハッシュ表現を文字列として返す必要があります |
メソッドパラメータ |
credentialは文字列 |
実装には、ユーティリティ クラス PasswordEncryptionHelper のメソッド
createStoragePassword(String, PasswordEncryptionMethod) がここで役立ちます。 列挙 PasswordEncryptionMethod は、暗号化の代替手段の多数のリストを既に提供しています。
メソッド |
def compareHashedPasswords(self, credential, storedCredential) |
説明 |
指定された (プレーンな) パスワードがハッシュ化されたパスワード表現と一致する場合に true を返します。 永続性拡張スクリプトが有効になっている場合、このメソッドはユーザー + パスワード認証で呼び出され、認証が成功したと見なされるかどうかを判断します。 |
メソッドパラメータ |
credentialは、ログインフォームで指定するような文字列としてのパスワード |
メソッドパラメータ |
storedCredential は、当該ユーザーのローカル データベースに保存されているハッシュ化された文字列のパスワード |
*このスクリプトをデータベースに保存することをお勧めします。 ファイルシステム オプションを使用する場合、コンテナー ベースの環境では、ノード間でファイルを複製する必要がある場合があります。 これは、スクリプトの呼び出し元が oxTrust、oxAuth、さらには SCIM サービスの可能性があるためです。
IDP 拡張機能
このスクリプト タイプは SAML / Shibboleth IDP に固有であり、開発者は次の 2 つの操作を実行できます。
- 属性変換: 開発者はこれを使用して、oxAuth 認証が完了し、制御の流れが Shibboleth IDP に返された後、返された OpenId 属性に対して任意の変換を実行できます。
- 属性更新:スクリプト内のメソッドは、SAML 応答が作成されて SP に返される直前に呼び出されます。 ここで、開発者は属性を追加、削除、または更新して、さまざまな結果を得ることができます。
メソッド |
def translateAttributes(self, context, configurationAttributes) |
説明 |
ユーザー プロファイルから属性を変換する |
メソッドパラメータ |
contextは、 org.gluu.idp.externalauth.TranslateAttributesContext.java |
メソッドパラメータ |
configurationAttributes は、 java.util.Map<String, SimpleCustomProperty> |