21 JSON Webトークン・サービスの使用
JSON Webトークン(JWT)サービスを使用すると、Oracle Identity Governance SCIMおよびRESTサービスの使用を簡略化できます。
この章では、Oracle Identity GovernanceのSCIMおよびRESTサービスでJWTサービスを使用する方法について説明します。次の項目が含まれます。
21.1 JWTサービス
JSON Webトークン(JWT)サービスによって、様々なデプロイメント・シナリオでOracle Identity GovernanceのSCIMおよびRESTサービスの使用が簡略化されます。
Oracle Identity Governanceトークン・サービスによって作成されたJWTには、Oracle Identity Governanceサーバーによって署名されたOIMユーザーのサブジェクト要求が含まれています。この要求を、SCIMおよびREST APIを保護するOWSMエージェントに対する認証に提示できます。
Oracle Identity GovernanceのSCIMおよびRESTサービスを保護するデフォルトのマルチトークンOWSMポリシーは、様々な標準認証メカニズムを受け入れます。このOIMアイデンティティ・プロバイダは、認証ドメインにまだ統合されていないOIGエンタープライズ・デプロイメント、またはRESTスタイルAPIをネイティブにサポートしないWebSSOなどの拡張済認証メカニズムを対象としています。このドキュメントでは、SCIMおよびRESTサービスにアクセスするためにOracle Identity Governanceのデプロイメントでサポートされる様々な認証シナリオについて説明します。
Oracle Identity Governance UIの拡張としてアプリケーションがデプロイされる場合もあれば、Oracle Identity Governance UIに依存しないアプリケーションで、アイデンティティ要件を満たすためにSCIMおよびRESTサービスが使用される場合もあります。SCIMおよびRESTコンシューマは、Oracle Identity Governanceがデプロイされブラウザで実行されているものとは異なるWeb層からロードされたHTML5/JSアプリケーションである場合もあれば、JSPまたは.Netアプリケーションのバックエンドである場合もあります。モバイル・アプリケーションでSCIMおよびRESTサービスが使用されることもあります。
21.2 認証シナリオ
アプリケーションは、スタンドアロン・デプロイメントやモバイル・アプリケーションなど、様々な認証シナリオでJWTを取得し、SCIMおよびRESTサービスにアクセスできます。
-
スタンドアロンのOracle Identity Manager UI認証(WLSおよびOIMアイデンティティ・ストアを使用、WAMなし):
Oracle Identity Manager UIのログイン・ページですでに認証されているユーザーは、再度認証を行わなくても(別のHTML5/JSアプリケーションを通じて) RESTおよびSCIM APIにアクセスできます。
-
スタンドアロン(WAMなし):
認証は、OIGポータルを介して行われます。Oracle Identity Manager UI認証は行われません。認証は、次のいずれかを使用して行われます。
-
Oracle Identity Managerをアイデンティティ・ストアとして使用する、OIG REST APIに対する直接認証
-
サブジェクトがOracle Identity Managerユーザー名に対応する別のメカニズム(OAuth2など)を使用した認証。
-
-
WAM対応のOIMドメイン(OAM、SMおよびTAM)
ユーザーは、Oracle Identity Managerを保護するWAMドメインに対して認証されています。サブジェクトがOracle Identity Managerユーザー名と一致するSSOトークンをアプリケーションが所持しているか、ユーザー名をアサートする特殊なリクエスト・ヘッダーをSSOエージェントが設定しています。
-
モバイル・アプリケーション
アプリケーションは、サブジェクトがOracle Identity Managerユーザー名と一致するセキュリティ・トークン(OAuth2など)を所持しています。すべてのシナリオにおいて、OWSMがOracle Identity ManagerのSCIMおよびRESTサービスを保護します。OWSMエージェントは、
http_jwt_token_ service_policy
を使用して構成されています。
21.3 JWTの取得と適用
Oracle Identity ManagerのSCIMおよびRESTサービスは、/iam/governance/token/api/v1/tokensのエンドポイントを提供するJWTアイデンティティ・プロバイダによって拡張されます。
/tokensエンドポイントで、OWSMはユーザーを認証し、IDを/tokensエンドポイント実装にアサートします。認証されたユーザーに十分な権限がある場合、エンドポイントで自分のトークンを発行できます。実装によって、ターゲット・ユーザー名が検証され、OIMユーザーと照合されて、ユーザー名を要求するJWTがHTTPレスポンスで発行されます。このJWTは、アプリケーションがこれ以降にOracle Identity ManagerのSCIMおよびREST APIにアクセスする際に常に使用されます。
デフォルトで、ファサードWebアプリケーションはOracle Identity Managerとともにデプロイされます。
21.4 SCIM-REST認証用のJWTベースのOIMアイデンティティ・プロバイダ
SCIMおよびREST認証用のJWTベースのOIMアイデンティティ・プロバイダによってJWTが発行されます。これには、SCIMおよびRESTのセキュリティ、アイデンティティ・プロバイダのエンドポイント、セッション・タイムアウトおよびリフレッシュも含まれます。
この項では、SCIMおよびREST認証用のJWTベースのOIMアイデンティティ・プロバイダについて説明します。次の項目が含まれます。
21.4.1 SCIMおよびRESTのセキュリティの概要
SCIMおよびRESTサービスは、RESTサービスに固有のOWSM認証専用ポリシーによって保護されます。また、サービスからのOIMエンティティへのアクセスに共通するOPSS認可ポリシーでも保護されます。
SCIMおよびRESTサービスについて構成されているデフォルトのOWSM認証専用ポリシーは、認証メカニズムの中でも特に、トークン・サービスによって作成されたJWTを受け入れます。OWSMのポリシー・アタッチメントとデフォルトのOracle Identity Managerポリシーの詳細は、グローバル・ポリシー・アタッチメントの理解を参照してください。
21.4.2 JSON Webトークン(JWT)
JSON Web トークン(JWT)は、RFC 7519で定義されています。
{"exp":1448420525,"sub":"xelsysadm","iss":"www.oracle.com","prn":"xelsysadm","iat":1448418725}
{"alg":"RS256","typ":"JWT","x5t":"8KTfKAncWGbLsNOlLZRQ77qSE74","kid":"xell"}
{ "tokenType": "Bearer", "accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsIng1dCI6IjhLVGZLQW5jV0diTHNOT2xMWlJRNzdxU0U3NCIsImtpZCI6InhlbGwifQ.eyJleHAiOjE0NDg0MjA1MjUsInN1YiI6InhlbHN5c2FkbSIsImlzcyI6Ind3dy5vcmFjbGUuY29tIiwicHJuIjoieGVsc3lzYWRtIiwiaWF0IjoxNDQ4NDE4NzI1fQ.s6OLNLmYdJXF2Zj6SaTM5vPHOcKuBIcJlBvVmSATCBKnS-_qmvUYn9-8bcXDbEBo9qum2O3kF0SmbtH0u6-rx-QtNXWupf9-vbtAUVoOpm8f6X3tHVbhzBVixKYnwAZC8tN3LJ6UNOhYzxe7iOZfclmhEQILgA7I3J152gToKmU", "expiresIn": "1799" }
SCIM-RESTサービスに対する後続のコールで、oracle.security.jps.service.trust.TrustService
およびoracle.security.restsec.jwt.JwtToken
によって作成されたaccessTokenの値が、JWTなどの認証ヘッダーで発行されます。
21.4.3 OIMアイデンティティ・プロバイダのエンドポイント
OIMアイデンティティ・プロバイダのエンドポイントは、OIMサーバー・コンテキスト(JVM)の/iam/governance/token/api/v1/tokensにデプロイされるRESTサービスです。
エンドポイントが呼び出されると、OIMユーザー名のサブジェクト要求を含むJWTが返されます。
token-for-selfモードでは、認証されたユーザーについてリクエストが処理されます。有効なユーザーは自分のトークンをリクエストできます。
21.4.4 セッション・タイムアウトおよびリフレッシュ
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の取得に必要な資格証明を安全に保存できます。そのため、ユーザー名/パスワード認証の場合でも、再認証にユーザーの操作が必要でないことがあります。
21.5 エンドポイントおよびファサード・アプリケーション
エンドポイントには、トークン・エンドポイントとリフレッシュ・トークン・エンドポイントがあります。ファサード・アプリケーションは、ログイン・ユーザーのトークンをフェッチします。
トークンおよびリフレッシュ・トークン・エンドポイントは/iam/governance/token/api/v1/tokens
です。
この項では、エンドポイントとファサード・アプリケーションについて説明します。次の項目が含まれます。
21.5.1 エンドポイント
トークンおよびリフレッシュ・トークン・エンドポイントは/iam/governance/token/api/v1/tokens
です。
この項では、トークン・エンドポイントとリフレッシュ・トークン・エンドポイントについて説明します。次の項目が含まれます。
21.5.1.1 トークン・エンドポイント( /iam/governance/token/api/v1/tokens)
この項では、トークン・エンドポイントについて説明します。次の項目が含まれます。
21.5.1.1.1 トークン・エンドポイントについて
このエンドポイントは、アプリケーションがユーザーのトークンを取得できるように公開されます。OWSMは/iam/governance/token/api/v1/tokensエンドポイントで、エンドポイントの実装に対するIDアサータとしてユーザーおよびサービスを認証します。認証されたユーザーに十分な権限がある場合、エンドポイントで自分のトークンを発行できます。HTTPレスポンスで、実装によってターゲット・ユーザー名がOIMユーザーと一致することが検証され、ユーザー名を要求するJWTが発行されます。このJWTは、アプリケーションがこれ以降にOracle Identity ManagerのSCIMおよびREST APIにアクセスする際に常に使用されます。
21.5.1.1.2 トークン・エンドポイントの認可
認可については、認証されたユーザーはtoken-for-selfをリクエストできます。このケースは、トークン・リクエストの空のペイロードによって識別されます。
ターゲット・ユーザーは、Basic認証ヘッダーで識別されたユーザー名です。
21.5.1.1.3 トークン・リクエスト
トークン・リクエスト(自己)
トークン・リクエスト(自己)には、次のリクエスト・メソッド、URLおよびヘッダーが含まれます。
-
リクエスト・メソッド: POST
-
URL: http://<host>:<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>
-
21.5.1.2 リフレッシュ・トークン・エンドポイント(/iam/governance/token/api/v1/tokens)
この項では、リフレッシュ・トークン・エンドポイントについて説明します。次の項目が含まれます。
21.5.1.2.1 リフレッシュ・トークン・エンドポイントについて
このエンド・ポイントは、有効期限切れになる前に古いトークンを提供することにより、アプリケーションが既存のトークンをリフレッシュできるように公開されます。このエンドポイントによって既存のトークンが検証され、既存のトークンがまだ有効である場合はトークンが再発行されます。このエンド・ポイントは、JWT OWSMポリシーによって保護されます。
21.5.1.2.2 リフレッシュ・トークン・エンド・ポイントの構成
表21-1 リフレッシュ・トークン・エンドポイントの構成
ユースケース | 使用の可否 | 説明 |
---|---|---|
既存のOracle Identity Manager UIログイン・セッション(非SSO)を含むWebブラウザ | いいえ | アプリケーションは、ファサード・アプリケーションを使用してログイン・ユーザーのトークンをフェッチします。ユーザーはいつでもOracle Identity Managerからログアウトできるため、このシナリオでリフレッシュ・エンドポイントを使用することはできません。ユーザー・トークンの有効期限が切れたときにユーザーがOracle Identity Managerにまだログインしている場合、アプリケーションは、ファサード・アプリケーションを使用して新しいトークンを取得できます。 |
既存のOracle Identity Manager UIログイン・セッション(SSO)を含むWebブラウザ | いいえ | アプリケーションは、ファサード・アプリケーションを使用してログイン・ユーザーのトークンをフェッチします。ユーザーはいつでもSSOからログアウトできるため、このシナリオでリフレッシュ・エンドポイントを使用することはできません。ユーザー・トークンの有効期限が切れたときにユーザーがSSOにまだログインしている場合、アプリケーションは、ファサード・アプリケーションを使用して新しいトークンを取得できます。 |
Oracle Identity Managerをアイデンティティ・ストアとして使用するポータルを介したWebブラウザ | はい | アプリケーションは、/tokensエンドポイントにアクセスし、ユーザー名およびパスワードを指定することにより、トークンを直接フェッチします。トークンの有効期限が間もなく切れる場合、アプリケーションは、既存のトークンを指定して/tokensエンドポイントにアクセスし、新しいトークンを受け取ります。 |
外部認証プロバイダを使用するポータルを介したWebブラウザ | はい | アプリケーションは、外部認証プロバイダによって認証されたユーザーのトークンをフェッチします。トークンの有効期限が間もなく切れる場合、アプリケーションは、既存のトークンを指定して/tokensエンドポイントにアクセスし、新しいトークンを受け取ります。 |
21.5.2 ファサード・アプリケーション
ファサード・アプリケーションは、既存のユーザー・セッションに基づいてログイン・ユーザーのトークンをフェッチします。OIM/SSOアプリケーションにログインし、HTML/JSアプリケーションに移動したユーザーは、ファサード・アプリケーションを使用して、ログイン・ユーザーのトークンを取得できます。
表21-2 ファサード・アプリケーションの有用性
ユースケース | 必須 |
---|---|
既存のOracle Identity Manager UIログイン・セッション(非SSO)を含むWebブラウザ | はい |
既存のOracle Identity Manager UIログイン・セッション(SSO)を含むWebブラウザ | はい |
Oracle Identity Managerをアイデンティティ・ストアとして使用するポータルを介したWebブラウザ | いいえ |
外部認証プロバイダを使用するポータルを介したWebブラウザ | いいえ |
ユーザーは、FacadeWebApp REST APIで次のURIを使用してJWTトークンをフェッチできます:
/FacadeWebApp/GetToken GET: これにより、ユーザー用のJWTトークンが取得されます。「FacadeWebApp Token ServiceのREST API」を参照してください。
21.6 CSRFおよびCORS保護
カスタム・リクエスト・ヘッダーを使用して、クロスサイト・リクエスト・フォージェリ(CSRF)攻撃からSCIMリソースを保護できます。クロスオリジンHTTPリクエストは、Cross-Origin Resource Sharing (CORS)メカニズムを使用して制限されます。
CSRFおよびCORS保護の詳細は、SCIMリソースのセキュリティを参照してください。