OAuth JWTクライアント・アサーション
クライアント・アプリケーションからのJWTアサーションを必要とするREST APIの呼出しをサポートするには、JWT_CLIENT_CREDENTIALS_ASSERTION_FOR_OAUTH
管理対象セキュリティ・ポリシーを使用します。
概要
アプリケーションは、データ/APIへのアクセスを許可するアクセス・トークンを返す前に、JWTクライアント・アサーションを使用してクライアントに認証を要求する場合があります。 OAuth JWTクライアント・アサーション・セキュリティ・ポリシーは、クライアント(Oracle Integration)と認証サーバー(証明書の交換を含む)間の信頼できる関係を介して、アプリケーションのAPIに対する認可を取得します。
このセキュリティ・ポリシーをアダプタに追加する場合、アダプタのユーザーは、対応する認証サーバーにクライアント・アプリケーションを作成し、正しい付与タイプ(JWTアサーション)で有効化されたクライアント資格証明のセットを取得する必要があります。 このプロセスでは、認証サーバーとOracle Integrationの両方で、信頼を確立するために証明書の交換が必要になる場合もあります。
その後、アダプタ・ユーザーはアダプタ・インタフェースを利用して、クライアント資格証明を持つJWTアサーションをOracle Integrationから認証サーバーに形成し、必要な権限を指定して送信できます。 引き換えに、認証サーバーはリクエストされたAPIのアクセス・トークンを提供します。 OAuthクライアント資格証明セキュリティ・ポリシーと同様に、このポリシーではリソース所有者の介入も必要ありません。
ノート:
アダプタでこのセキュリティ・ポリシーを使用する場合は、必要な認証サーバーでクライアント・アプリケーションを作成し、サーバーのJWTアサーションを策定し、jwt.io、Postman、その他のブラウザ・プラグインなどのツールでアサーションを完全にテストしてください。セキュリティ・プロパティ
この項では、OAuth JWTクライアント・アサーション認証スキーム・テンプレートで使用可能なセキュリティ・プロパティを示します。
クライアント・アサーションは、アダプタ・ユーザーによってアダプタ・インタフェースでこれらのプロパティに対して入力された値を使用して形成されます。 アダプタ開発者は、(アダプタに対応する)認証サーバーのデフォルト値を入力することで、アダプタのユーザーに対するアサーション・ペイロードの策定を容易にできます。 このように、アダプタのユーザーは、audience
, kid
, jti
, algorithm
, expiration duration
, scope
やaccess token URL
などの一部のプロパティの値を入力する必要はありません。
通常、ユーザーは必要な認証サーバーにクライアント・アプリケーションを作成し、client_id
、client_secret
、およびアップロードされた証明書の別名の値を取得するだけで済みます。
アサーションを形成するために1つ以上のカスタム・プロパティを含める必要がある場合は、connectionProperties
セクションにそれらを含めることができます。 「接続プロパティおよびサンプル・コード」を参照してください。
名前 | 表示名 | Short Description | 説明 | データ型 | 必須 |
---|---|---|---|---|---|
|
|
|
アクセス・トークンを取得するためのリクエストの送信先URI。 |
String |
はい |
|
|
|
JWTヘッダーには、キー識別子、サインインに使用されるアルゴリズムなどのJWTに関するメタデータが含まれます。 |
String (JSON String) |
はい |
|
|
|
JWTペイロードには、エンティティに関する文(ユーザーなど)と、クレームと呼ばれる追加のエンティティ属性が含まれます。 |
String (JSON String) |
はい |
|
|
|
Oracle Integration証明書に秘密キーをアップロードした後に受信した署名キー識別子。 |
String |
はい |
|
|
|
ユーザーのかわりにアプリケーションがリクエストしている権限。 |
String |
いいえ |
|
Customized Access Token Request |
|
アクセス・トークンのフェッチに使用されるHTTPリクエストのURI構文を使用して値が形成されるアクセス・トークン・リクエスト。 URI構文はcURLに似ています。 |
String |
いいえ |
サンプル・コード: OAuth JWTクライアント・アサーション(UK NHS MESH API)
この例では、UK NHSのアサーションにカスタム・プロパティ(発行者)が必要です。 セキュリティ・ポリシー定義でJQ式を使用して、ヘッダーと本文の形式に注意してください。 一部のプロパティは、JQ式自体のポリシーによってデフォルト設定されています。
"connectionProperties": [
{
"name": "iss",
"type": "STRING",
"displayName": "ISSUER",
"shortDescription": "The issuer claim that identifies the principal that issued the JWT.",
"required": true,
"hidden": false,
"scope": [
"ACTION"
]UK
},
{
"name": "kid",
"type": "STRING",
"displayName": "KID",
"shortDescription": "Key Identifier that indicates what key was used to sign the JWT.",
"required": true,
"hidden": false,
"scope": [
"ACTION"
]
}
],
"securityPolicies": [
{
"type": "managed",
"policy": "JWT_CLIENT_CREDENTIALS_ASSERTION_FOR_OAUTH",
"description": "Jwt Client Credentials Assertion For OAuth Policy",
"displayName": "Jwt Client Credentials Assertion For OAuth",
"scope": "ACTION",
"securityProperties": [
{
"name": "oauth.access.token.uri",
"displayName": "Access token uri",
"description": "Access token uri",
"shortDescription": "https://www.google.com/oauth/token",
"hidden": true,
"required": true,
"default": "https://dev.api.service.nhs.uk/oauth2/token"
},
{
"name": "jwt_header",
"displayName": "JWT header",
"description": "JWT header",
"shortDescription": "{\"alg\":\"RSA256\"}",
"hidden": true,
"required": true,
"default": "${{\"alg\" : \"RS512\",\"kid\": .connectionProperties.kid}}"
},
{
"name": "jwt_payload",
"displayName": "JWT Payload",
"description": "JWT Payload",
"shortDescription": "{\"iss\":\"123as12\", \"sub\":\"as12123\"}",
"hidden": true,
"required": true,
"default": "${{\"iss\": .connectionProperties.iss,\"sub\": .connectionProperties.iss,\"aud\": \"https://dev.api.service.nhs.uk/oauth2/token\",\"exp\": 1669859997,\"jti\": \"2c59e3b4-982a-44ea-94a2-3785e926df01\"}}"
},
{
"name": "jwt_signing_key_alias_name",
"displayName": "JWT Private Key Alias",
"description": "Jwt Signing key. This is the key name of certificate uploaded in the OIC certificates page.",
"shortDescription": "Example: MSSignkey",
"hidden": false,
"required": true,
"default": ""
},
{
"name": "scope",
"displayName": "Scope",
"description": "Scope",
"shortDescription": "Scope",
"hidden": true,
"required": false,
"default": ""
},
{
"name": "jwtAccessTokenRequest",
"displayName": "Access Token Request",
"description": "Access Token Request",
"shortDescription": "Example: AC1234",
"hidden": true,
"required": false,
"default": ""
}
]
}
]