APIゲートウェイ・デプロイメントの作成
関数の準備が整ったら、Oracle Identity Cloud ServiceでJWT検証を行うためのネイティブ認証メカニズムを統合およびテストできます。
ネイティブJWT検証によるAPIゲートウェイ・デプロイメントの作成
Oracle Cloud Infrastructure GatewayネイティブJWT検証機能を使用して、デプロイメントにJava Web Token (JWT)ベースの認証ポリシーを追加できます。
このJWTタイプでは、受信アクセス・トークンの検証を(ヘッダーまたはパラメータ経由で)実行するために必要なデータを指定できます。ポリシーには、次の情報が必要です。
- 許可された発行者:トークン発行者。複数のOAuthサーバーがサポートされますが、この場合、
https://identity.oraclecloud.com/
を使用します。 - オーディエンス:このトークンのアクセスを許可されるリソース。
- 公開キー:発行者およびオーディエンス内で、トークンの検証に使用されるJson Webキー・セット(JWKS )。次の2種類のJWKSを使用できます。
- 静的キー:このオプションを使用する場合は、RFC 7517項4に従って必要なプロパティを持つJSON形式を使用してJWKSを手動で指定する必要があります。
- リモート・キー:このオプションを使用する場合、RESTを使用してjksを消費できるURLを指定する必要があります。この機能の制限は、現在この機能ではJWKSを取得するための保護されたURLの読取り機能がサポートされていないため、指定したURLの保護を解除する必要があることです。
- 拡張オプション:
- 最大クライアント・スキュー(秒単位): APIゲートウェイとアイデンティティ・プロバイダのタイミングに多少の違いがある場合、この値を使用すると、2つのサービス間でタイミングを調整するトークン有効性ウィンドウ時間を調整できます。
- 要求:着信トークンの必要に応じて要求を検証するため。たとえば、
client_id
claimまたはuser_id
claimです。
エンドポイントおよびJWT検証を使用して、前のステップで作成された関数に到達するためのルートを含むAPIゲートウェイに新しいデプロイメント名を作成します。この例では、デプロイメントにはmy_jwt_test
という名前が付いています。
my_jwt_test
ペイロードのコンテンツを確認できます。
エンドポイントのREST呼出しのテスト
新しいエンドポイントのREST呼出しをテストするには、Postmanの「新しいアクセス・トークンの取得」機能を使用します。
次のステップで生成されたトークンを使用すると、Oracle Fusion Applications Cloud Serviceエンドポイントに直接アクセスできなくなります。これは、トークンがOracle Visual BuilderからOracle Identity Cloud Service Appによって生成され、以前に設定したスコープごとに、現在の構成を使用してOracle Functionsに到達できるためです。また、別のOracle Identity Cloud Service Appを使用してトークンを生成し、そのアプリケーションにOracle Functions Resource Scopeに到達する権限がない場合、Oracle Functions Oracle Identity Cloud Service Resourceのオーディエンスを追加したため、API Gatewayではリクエストが許可されません(401エラーが返されます)。要求クライアントId検証を追加した場合、APIゲートウェイでは、指定されたOracle Identity Cloud Serviceアプリケーションclient_idsとのみトークンが一致するようにします。
次のパラメータを使用してテストします。
- 権限付与タイプ: パスワード資格証明 -この権限付与タイプは、指定されたユーザー名が生成されたトークンのサブジェクトであることを確認するために使用します。
- アクセス・トークンURL: Oracle Identity Cloud ServiceインスタンスのOAuth URL。たとえば、
https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token
です。 - ユーザー名: Oracle Identity Cloud ServiceとOracle Fusion Applications Cloud Serviceの両方に存在し、両方の適切な権限が付与されたユーザー。
- パスワード:このユーザーのパスワードを入力します。
- ClientId: Oracle Visual Builderに関連付けられたOracle Identity Cloud Service Client Oracle Functions ResourceのID。
- ClientSecret: Oracle Visual Builderに関連付けられたOracle Identity Cloud Service App Client Oracle Functions Resourceのクライアント・シークレット
- スコープ:このスコープは、Oracle Functions Oracle Identity Cloud Service App provided Resourcesと一致する必要があります。例:
https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension
{
"principal": "mary.jane",
"gotPrincipalFrom": "BEARER",
"statusCode": "200",
"response": {
"items": [],
"count": 0,
"hasMore": false,
"limit": 25,
"offset": 0,
"links": [
{
"rel": "self",
"href": "https://myfusionservice.fa.dc1.oraclecloud.com:443/fscmRestApi/resources/11.13.18.05/expenses",
"name": "expenses",
"kind": "collection"
}
]
}
}
カスタム認証によるAPIゲートウェイ・デプロイメントの作成(オプション)
カスタム認証ファンクションを使用して、APIゲートウェイ・エンドポイントへのインバウンド・コールのベアラー・トークンを検証する場合は、この方法を使用します。
これは、Oracle Cloud Infrastructureセクションのオプションの「認証ファンクションの定義」からstetpsを実行した場合に定義したオプションの関数です。
次のコード・スニペットは、ウィザードを使用せずにデプロイに使用できるOracle Cloud Infrastructure APIデプロイメント仕様のJSONファイルの例です。このファイル内では次のものが表示されます。
- 1から8行:認証リクエスト・ポリシー。これは、このデプロイメントのリクエストに対して、最初にこの関数(functionId)をコールし、tokenHeaderを渡し、trueを返した場合は続行することを指示する定義で、そうでない場合はHTTPの未認可メッセージで応答します。
- 明細9 -17: Cross - Origin Resource Sharingを管理および制御するCORS定義。
- 18 -43: FaaSの個々の関数に対する2つのURLエントリ・ポイント/dbb。
{
"requestPolicies": {
"authentication": {
"type": "CUSTOM_AUTHENTICATION",
"isAnonymousAccessAllowed": true,
"functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx",
"tokenHeader": "Authorization"
}
"cors":{
"allowedOrigins": [<list-of-origins>],
"allowedMethods": [<list-of-methods>],
"allowedHeaders": [<list-of-implicit-headers>],
"exposedHeaders": [<list-of-exposed-headers>],
"isAllowCredentialsEnabled": <true|false>,
"maxAgeInSeconds": <seconds>
}
},
"routes": [
{
"path": "/opportunities",
"methods": [
"GET"
],
"requestPolicies": {},
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
}
},
{
"path": "/opportunities/{optyid}",
"methods": [
"PATCH"
],
"requestPolicies": {},
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
}
}
]
}
</seconds></true|false></list-of-exposed-headers></list-of-implicit-headers></list-of-methods></list-of-origins>