Oracle® Fusion Middleware Oracle Identity Managerのためのアプリケーションの開発とカスタマイズ 11gリリース2 (11.1.2.3.0) E61958-10 |
|
![]() 前 |
![]() 次 |
バンドル・パッチ11.1.2.3.161018を適用すると、Oracle Identity Managerによって、Oracle Identity ManagerのSCIMおよびRESTサービスの使用を簡略化するためのJSON Webトークン(JWT)サービスが提供されます。
注意:
|
この項では、Oracle Identity ManagerのSCIMおよびRESTサービスに対してJWTサービスを使用する方法について説明します。内容は次のとおりです。
様々なデプロイメント・シナリオでOracle Identity ManagerのSCIMおよびRESTサービスの使用を簡略化するために、JSON Webトークン(JWT)サービスが用意されており、Oracle Identity Managerで使用できます。Oracle Identity Managerトークン・サービスによって作成されたJWTには、Oracle Identity Managerサーバーによって署名されたOIMユーザーのサブジェクト要求が含まれています。このJWTは、SCIMおよびRESTサービスのAPIを保護するOWSMエージェントに対する認証に提示できます。
Oracle Identity ManagerのSCIMおよびRESTサービスを保護するデフォルトのマルチトークンOWSMポリシーは、様々な標準認証メカニズムを受け入れます。このOIMアイデンティティ・プロバイダは、認証ドメインにまだ統合されていないOIMエンタープライズ・デプロイメント、またはRESTスタイルAPIをネイティブにサポートしないWebSSOなどの拡張済認証メカニズムを対象としています。この項では、SCIMおよびRESTサービスにアクセスするためにOracle Identity Managerのデプロイメントでサポートされる様々な認証シナリオを説明します。ある場合にはOracle Identity Manager UIの拡張としてアプリケーションがデプロイされ、別の場合にはアプリケーションがOracle Identity Manager UIに依存せず、SCIMおよびRESTサービスを使用してアイデンティティ要件を満たします。SCIMおよびRESTコンシューマは、Oracle Identity Managerがデプロイされブラウザで実行されているWeb層とは異なるWeb層からロードされたHTML5/JSアプリケーション、あるいはJSPまたは.Netアプリケーションのバックエンドになります。別のシナリオとしては、SCIMおよびRESTサービスを使用するモバイル・アプリケーションの場合があります。
次のユースケースでは、JWTを取得し、SCIMおよびRESTサービスにアクセスするための前提となる様々な認証シナリオについて説明します。
スタンドアロン(WAM以外):
このユースケースでは、認証はOIMポータルを介して行われます。そのため、Oracle Identity Manager UI認証はありません。認証は次のいずれかとなります。
アイデンティティ・ストアとしてOracle Identity Managerを使用して、OIM REST APIに対して直接
サブジェクトがOracle Identity Managerユーザー名に対応するその他のメカニズム(OAuth2など)。
OIMドメインがWAM対応(OAM、SM、TAM):
ユーザーが、Oracle Identity Managerを保護しているWAMドメインの認証を受けています。Oracle Identity Managerユーザー名に対応するサブジェクトを含むSSOトークンをアプリケーションが所持しているか、またはユーザー名をアサートする特別なリクエスト・ヘッダーをSSOエージェントが設定しています。
モバイル・アプリケーション:
アプリケーションは、Oracle Identity Managerユーザー名に対応するサブジェクトを含むセキュリティ・トークンを所持します(OAuth2など)。すべてのシナリオにおいて、OWSMがOracle Identity ManagerのSCIMおよびRESTサービスを保護します。OWSMエージェントは、oracle/multi_token_noauth_over_ssl_rest_service_policy
を使用して構成されます。
Oracle Identity ManagerのSCIMおよびRESTサービスは、JWTアイデンティティ・プロバイダによって拡張されて、/iam/governance/token/api/v1/tokens
のエンドポイントを提示しています。これにより、図22-1に示すように、アプリケーションがそれ以降にSCIMおよびRESTサービスで使用するためのJWTを取得できます。
OWSMは/iam/governance/token/api/v1/tokens
エンドポイントで、/iam/governance/token/api/v1/tokens
エンドポイントの実装に対するIDアサータとしてユーザーおよびサービスを認証します。認証されたユーザーに十分な権限があれば、/iam/governance/token/api/v1/tokens
エンドポイントで自分に対してトークンを発行できます。/iam/governance/token/api/v1/tokens
の実装により、ターゲット・ユーザー名が確認され、OIMユーザーと照合され、ユーザー名を申告するJWTがHTTPレスポンスで発行されます。このJWTは、アプリケーションがこれ以降にOracle Identity ManagerのSCIMおよびREST APIにアクセスする際に常に使用されます。
この項では、SCIMおよびREST認証用のJWTベースのOIMアイデンティティ・プロバイダについて説明します。内容は次のとおりです。
SCIMおよびRESTサービスは、OWSM認証専用のポリシーによって保護されています。正常なアクセスでは、このポリシーによってweblogic.security.principal.WLSUserImpl principal
を含むjavax.security.auth.Subject
を含むコンテキストが確立され、プリンシパルに認証済ログインID (OIMユーザー名)が含まれます。SCIMおよびRESTサービスは、Oracle Identity Managerサーバー・アプリケーションにデプロイされて、OimClient
経由のUserManager.createUser
などのOracle Identity ManagerサービスのAPIを起動します。EJBリモート・メカニズムによって、WLSログイン・コンテキストがOracle Identity Managerコンテキストに変換されます。Oracle Identity Managerコンテキストは、その後、認可およびロギングの目的でコール元を識別するために使用されます。
注意: 次のコールを使用して、サブジェクトを取得します。Subject activeSubject = JpsSubject.getSubject(AccessController.getContext()); |
JSON Web トークン(JWT)は、RFC 7519で定義されています。OIMアイデンティティ・プロバイダによって発行されたJWTには、サブジェクト(OIMユーザー)、発行者、有効期限などの要求セグメントが含まれます。
{"exp":1448420525,"sub":"xelsysadm","iss":"www.oracle.com","prn":"xelsysadm","iat":1448418725}
また、JWTには、JWSの生成に使用されるアルゴリズムおよび証明書鍵を示す認証ヘッダー(JOSE)が含まれます。
{"alg":"RS256","typ":"JWT","x5t":"8KTfKAncWGbLsNOlLZRQ77qSE74","kid":"xell"}
ヘッダーおよびペイロードは、base64urlでエンコードされて連結され、「.」で区切られます。その後、入力に対してRSA署名が生成され、base64urlでエンコードされて、「.」の後に追加されます。OIMアイデンティティ・プロバイダによって、結果が次のように別のJSON構造にカプセル化されます。
{ "tokenType": "Bearer", "accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsIng1dCI6IjhLVGZLQW5jV0diTHNOT2xMWlJRNzdxU0U3NCIsImtpZCI6InhlbGwifQ.eyJleHAiOjE0NDg0MjA1MjUsInN1YiI6InhlbHN5c2FkbSIsImlzcyI6Ind3dy5vcmFjbGUuY29tIiwicHJuIjoieGVsc3lzYWRtIiwiaWF0IjoxNDQ4NDE4NzI1fQ.s6OLNLmYdJXF2Zj6SaTM5vPHOcKuBIcJlBvVmSATCBKnS-_qmvUYn9-8bcXDbEBo9qum2O3kF0SmbtH0u6-rx-QtNXWupf9-vbtAUVoOpm8f6X3tHVbhzBVixKYnwAZC8tN3LJ6UNOhYzxe7iOZfclmhEQILgA7I3J152gToKmU", "expiresIn": "1799" }
SCIMまたはRESTサービスに対する後続の呼出しで、accessTokenの値が認証ヘッダー内で送信されます。たとえば、oracle.security.jps.service.trust.TrustService
およびoracle.security.restsec.jwt.JwtToken
経由で生成されるJWTはその例です。
これは、/iam/governance/token/api/v1/tokens
のOIMサーバー・コンテキスト(JVM)にデプロイされるRESTサービスです。
正常な呼出しでは、OIMユーザー名のサブジェクト要求を含むJWTが返されます。これは、認証済ユーザーのリクエストが処理されるtoken-for-selfモードで機能します。有効なユーザーは自己のトークンをリクエストできます。
GETを許可するとユーザー名パラメータが公開されるため、POSTのみがサポートされています。
JWTには、サーバー構成値から設定された有効期限が含まれている必要があります。HTTP PUTメソッドを使用して、有効期限が切れていないJWTを指定することにより、/iam/governance/token/api/v1/tokens
サービスでJWTをリフレッシュできます。そのため、/iam/governance/token/api/v1/tokens
エンドポイントに対してHTTP Basic認証とJWTの両方を受け入れるようにOWSMを構成する必要があります。
HTML5/JS (Webブラウザ)アプリケーションでは、アプリケーションがアイドルであるタイミングを認識したり、リフレッシュ・サイクルを停止するなど、トークンのリフレッシュを管理する必要があります。最後のトークンの有効期限が切れると、アプリケーションは、以前に使用されたメカニズムによって再認証を行います。
モバイル・アプリケーションでは、JWTの取得に必要な資格証明を安全に保存できます。このため、ユーザー名/パスワード認証の場合であっても、再認証にユーザーの操作は必ずしも必要ではありません。
この項では、エンド・ポイントとアプリケーションの詳細について説明します。この章の内容は次のとおりです。
この項では、トークン・エンド・ポイントとリフレッシュ・トークン・エンド・ポイントについて説明します。内容は次のとおりです。
このエンド・ポイントは、アプリケーションがユーザーのトークンを取得するために公開されています。OWSMは/iam/governance/token/api/v1/tokens
エンドポイントで、/iam/governance/token/api/v1/tokens
エンドポイントの実装に対するIDアサータとしてユーザーおよびサービスを認証します。/iam/governance/token/api/v1/tokens
の実装により、ターゲット・ユーザー名がOIMユーザーと一致することが確認され、ユーザー名を申告するJWTがHTTPレスポンスで発行されます。このJWTは、アプリケーションがこれ以降にOracle Identity ManagerのSCIMおよびREST APIにアクセスする際に常に使用されます。
このエンド・ポイントは、HTTPSでのみ有効です。
認可
次のような認可のユースケースを考えてみます。
Token-For-Self: 認証済ユーザーはtoken-for-selfをリクエストできます。このケースは、トークン・リクエストの空のペイロードによって識別されます。ターゲット・ユーザーは、Basic認証ヘッダーで識別されたユーザー名です。
トークン・エンド・ポイント・シナリオ
この項では、次のトークン・エンド・ポイント・シナリオについて説明します。
Token-For-Self: Oracle Identity Managerをアイデンティティ・ストアとして使用するポータルを介したWebブラウザ
トークン・リクエスト(自己)
リクエスト・メソッド: POST
URL: https://<host>:<ssl port>/iam/governance/token/api/v1/tokens
ヘッダー:
Authorization: Basic <Base64 encoded user:password>
Accept: application/json
Content-Type: application/json
X-Requested-By: <random value>
このエンド・ポイントは、有効期限切れになる前に古いトークンを提供することにより、アプリケーションが既存のトークンをリフレッシュするために公開されています。このエンド・ポイントによって、既存のトークンが検証され、既存のトークンがまだ有効である場合はトークンが再発行されます。このエンド・ポイントは、JWT OWSMポリシーによって保護されています。
このエンド・ポイントは、HTTPSでのみ有効です。
リフレッシュ・トークン・エンド・ポイントの構成
表22-1に、リフレッシュ・トークン・エンドポイントの構成を示します。
表22-1 リフレッシュ・トークン・エンド・ポイントの構成
ユースケース | 可用性 | 説明 |
---|---|---|
Oracle Identity Managerをアイデンティティ・ストアとして使用するポータルを介したWebブラウザ |
はい |
ユーザー名とパスワードを指定して、 |
リフレッシュ・トークン・リクエスト
リクエスト・メソッド: PUT
URL: https://<host>:<ssl port>/iam/governance/token/api/v1/tokens
ヘッダー:
Authorization: Bearer <token value>
Accept: application/json
Content-Type: application/json
X-Requested-By: <random value>