プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Identity Managerのためのアプリケーションの開発とカスタマイズ
11gリリース2 (11.1.2.3.0)
E61958-10
  目次へ移動
目次

前
 
次
 

22 JSON Webトークン・サービスの使用

バンドル・パッチ11.1.2.3.161018を適用すると、Oracle Identity Managerによって、Oracle Identity ManagerのSCIMおよびRESTサービスの使用を簡略化するためのJSON Webトークン(JWT)サービスが提供されます。


注意:

  • バンドル・パッチ11.1.2.3.161018のダウンロードおよび適用手順は、バンドル・パッチのドキュメントを参照してください。

  • JWTトークンを取得できるようにするトークン・サービスAPIの詳細は、Oracle Identity Management 11g Release 2 (11.1.2.3.0)ドキュメント・ライブラリのOracle Identity Governance Token ServiceのREST APIを参照してください。JWTトークンを使用すれば、ユーザーが安全にRESTエンドポイントにアクセスできます。そのためには、次のURLにある、参照セクションのタイトルOracle Identity Governance Token ServiceのREST APIに移動します。

    http://docs.oracle.com/cd/E52734_01/cross/allbooksdocs.htm


この項では、Oracle Identity ManagerのSCIMおよびRESTサービスに対してJWTサービスを使用する方法について説明します。内容は次のとおりです。

22.1 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サービスを使用するモバイル・アプリケーションの場合があります。

22.2 認証シナリオ

次のユースケースでは、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を使用して構成されます。

22.3 JWTの取得と適用

Oracle Identity ManagerのSCIMおよびRESTサービスは、JWTアイデンティティ・プロバイダによって拡張されて、/iam/governance/token/api/v1/tokensのエンドポイントを提示しています。これにより、図22-1に示すように、アプリケーションがそれ以降にSCIMおよびRESTサービスで使用するためのJWTを取得できます。

図22-1 トークン・エンドポイント・サービス

図22-1の説明が続きます
「図22-1 トークン・エンドポイント・サービス」の説明

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にアクセスする際に常に使用されます。

22.4 SCIM-REST認証用のJWTベースのOIMアイデンティティ・プロバイダ

この項では、SCIMおよびREST認証用のJWTベースのOIMアイデンティティ・プロバイダについて説明します。内容は次のとおりです。

22.4.1 SCIMおよびRESTのセキュリティ概要

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());

22.4.2 JSON Webトークン(JWT)

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はその例です。

22.4.3 OIMアイデンティティ・プロバイダのエンド・ポイント

これは、/iam/governance/token/api/v1/tokensのOIMサーバー・コンテキスト(JVM)にデプロイされるRESTサービスです。

正常な呼出しでは、OIMユーザー名のサブジェクト要求を含むJWTが返されます。これは、認証済ユーザーのリクエストが処理されるtoken-for-selfモードで機能します。有効なユーザーは自己のトークンをリクエストできます。

GETを許可するとユーザー名パラメータが公開されるため、POSTのみがサポートされています。

22.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の取得に必要な資格証明を安全に保存できます。このため、ユーザー名/パスワード認証の場合であっても、再認証にユーザーの操作は必ずしも必要ではありません。

22.5 エンド・ポイントとアプリケーションの詳細

この項では、エンド・ポイントとアプリケーションの詳細について説明します。この章の内容は次のとおりです。

22.5.1 エンド・ポイント

この項では、トークン・エンド・ポイントとリフレッシュ・トークン・エンド・ポイントについて説明します。内容は次のとおりです。

22.5.1.1 トークン・エンドポイント(/iam/governance/token/api/v1/tokens)

このエンド・ポイントは、アプリケーションがユーザーのトークンを取得するために公開されています。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>

22.5.1.2 リフレッシュ・トークン・エンドポイント(/iam/governance/token/api/v1/tokens)

このエンド・ポイントは、有効期限切れになる前に古いトークンを提供することにより、アプリケーションが既存のトークンをリフレッシュするために公開されています。このエンド・ポイントによって、既存のトークンが検証され、既存のトークンがまだ有効である場合はトークンが再発行されます。このエンド・ポイントは、JWT OWSMポリシーによって保護されています。

このエンド・ポイントは、HTTPSでのみ有効です。

リフレッシュ・トークン・エンド・ポイントの構成

表22-1に、リフレッシュ・トークン・エンドポイントの構成を示します。

表22-1 リフレッシュ・トークン・エンド・ポイントの構成

ユースケース 可用性 説明

Oracle Identity Managerをアイデンティティ・ストアとして使用するポータルを介したWebブラウザ

はい

ユーザー名とパスワードを指定して、/iam/governance/token/api/v1/tokensエンドポイントにアクセスすることにより、アプリケーションはトークンを直接取得します。トークンがまもなく期限切れになる場合は、アプリケーションが既存のトークンを指定して/iam/governance/token/api/v1/tokensエンドポイントにアクセスし、新しいトークンを取得する必要があります。


リフレッシュ・トークン・リクエスト

  • リクエスト・メソッド: 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>