機械翻訳について

OAuthプロバイダの構成

OAuth 2.0は、アプリケーションまたはサービスが、保護されているHTTPリソースへの制限付きアクセスを取得できるようにする認可フレームワークです。 Oracle API Platform Cloud Serviceでは、OAuthポリシーを使用して、保護されているリソースへのアクセスを許可するアクセス・トークンを強制します。

OAuthの紹介

OAuthは、クライアント・アプリケーションがユーザー名とパスワードの資格証明を必要とせずにセキュア・リソースにアクセスできる標準です。 かわりに、クライアント・アプリケーションは、保護されたリソースへのアクセスに使用されるOAuthプロバイダからアクセス・トークンを受け取ります。

ロール

  • リソース所有者: リソースへのアクセス権を付与できるアプリケーションまたはユーザー。

  • リソース・サーバー: リソースがホストされているAPIサーバー。 アクセス・トークンを使用するリクエストを受け入れて応答できます。

  • クライアント・アプリケーション: リソース所有者のかわりにリソース・リクエストを作成するアプリケーション。

  • 承認サーバー: リソース所有者が認証され、認可が取得された後に、クライアントにアクセス・トークンを発行するサーバー。

アプリケーションをOAuthサービスに登録すると、一意のクライアントIDとクライアント・シークレットを取得できます。 クライアントIDは、ユーザー名のようなもので、パブリック・エクスポージャ用です。 Javascriptソース・コードに含めることも、ログインURLの作成にも使用できます。 クライアント・シークレットは、パスワードのようなもので、アプリケーションがアクセス・トークンをリクエストするときに使用されます。 アプリケーションは、認可サーバーからトークンを受信するためにクライアント・シークレットを知っている必要があります。 クライアント・シークレットは保護する必要があります。

トークンの検証に加えて、スコープを使用したAPIへのアクセスを制限できます。 HTTPメソッド(GET、PUT、POSTおよびDELETE)ごとのアクセスを特定のスコープに制限することもできます。 「OAuth 2.0ポリシーの適用」を参照してください

Oracle API Platform Cloud Serviceサポートを行うOAuthプロバイダ

Oracle API Platform Cloud Serviceのこのリリースでは、トークンの書式がJWTの場合に、RFC7519に基づいて、OAuthプロバイダからトークンを消費できます。

OAuthポリシーは、JWTアクセス・トークンをアサートし、RFC7519で定義されているさまざまな標準クレームを検証します。 次に、検証される標準要求を示します。

  • "iss": トークンの発行者が有効であることを確認します。

  • "sub": トークンを作成したユーザーを確認します。

  • "aud": トークンが作成されたユーザーを確認します。

  • "exp": トークンの有効期限と時間をチェックします。

  • "nbf": トークンの有効日および有効でない時間を確認します。

  • "iat": トークンの発行時間を確認します。

  • "jti": トークンの一意のIDをチェックします。 これはオプションです。

JWT仕様の詳細は、https://tools.ietf.org/html/rfc7519#section-4.1を参照してください

Oracle API Platform Cloud Serviceでは、「JWSコンパクト・シリアル化」形式によりJWTトークンに署名する必要があります。 https://tools.ietf.org/html/rfc7515#section-3を参照してください。

プロバイダの構成

OAuthプロバイダの場合は、リソース・アプリケーションとクライアント・アプリケーションの2つのアプリケーションを作成します。 リソース・アプリケーションを作成するときに、プライマリ・オーディエンスと、アプリケーションを保護する必要があるスコープを追加します。 クライアント・アプリケーションを作成するときに、リソース所有者資格証明、クライアント資格証明、許可コード、暗黙的などの様々な権限付与タイプを定義し、リソース・サーバー・アプリケーションからスコープを設定します。

OAuthフロー

クライアント・アプリケーションは、アイデンティティ・プロバイダによって認証され、アクセス・トークンを受け取ります。 クライアント・アプリケーションは、トークンをゲートウェイ・ノードに送信します。ゲートウェイ・ノードは、OAuthエンフォルサとして機能し、トークンを検証します。 トークンが有効な場合、リクエストは保護されたリソースに渡されます。


ouath-flow.pngの説明は以下のとおりです
「図ouath-flow.pngの説明」

OAuthポリシー施行

JSON Webトークン(JWT)は、以下を使用して検証されます:

  • JWTには発行者(iss)要求が含まれている必要があります。

  • JWTにはオーディエンス("aud")クレームが含まれている必要があります。

  • JWTには、発行済(iss)および失効(exp)時間が含まれている必要があります。

  • JWTは、メッセージの整合性を確保するためにデジタル署名する必要があります。 予想は、非対称的に署名されるべきです。

  • スコープは、JWTでスコープとして定義する必要があります。 スコープの主張は、スコープの主張の値がスペースで区切られた文字列です。 スコープ要求についてカスタマイズした名前がある場合は、プロファイルXMLファイルのScopeClaimName要素を使用してそれを定義できます。 「OAuthプロファイルXMLファイル」を参照してください。

ノート:

サブジェクト(" sub ")要求はオプションです。

前提条件

基本的な前提条件:
  1. プロバイダにOAuthアプリケーションを作成します。
  2. プロバイダにOAuthクライアントを作成します。

基本ステップ

プロバイダを構成するには、次の基本的な一般的なステップに従います:
  1. OAuthリソースを作成します。
  2. クライアント・アプリケーションがリソースにアクセスできるようにします。
  3. OAuthトークンを取得します。

Oracle API Platform Cloud Serviceを使用した例

Oracle Identity Cloud Serviceによってアクセス・トークンが提供されている場合は、次のステップに従ってリソースを保護します。

  1. リソース・サーバーのエンドポイントとして、プライマリ・オーディエンスを持つリソース・サーバー・アプリケーションをOracle Identity Cloud Serviceに作成します。 ロード・バランシングURLを含む完全なAPIエンドポイントを入力します。

  2. リソースのスコープを定義します。


    resource-server2.pngの説明は以下のとおりです
    「図resource-server2.pngの説明」
  3. 必要な権限を持つクライアント・アプリケーションをOracle Identity Cloud Serviceで作成します。

  4. リソース・サーバー・アプリケーションから、その特定のリソースに対して許可されているスコープを追加します。 定義した許可スコープが、アプリケーションで定義されているスコープと一致することを確認してください。


    client-configuration2.pngの説明は以下のとおりです
    「図client-configuration2.pngの説明」

ゲートウェイ構成

  1. 構成.xmlファイルを作成します。 「OAuthプロファイルXMLファイル」を参照してください

  2. 構成ファイル内にOracle Identity Cloud Serviceインスタンスの公開キーを追加し、Oracle Identity Cloud Serviceインスタンスに対するその他の必須要求を構成します。

    公開キーを入手するには、REST API for Oracle Identity Cloud Service「テナント署名証明書をJWK形式で取得」を参照してください。

  3. リソースAPIを保護するには、ポリシー・チェーンの開始時にOAuthポリシーを追加します。 「OAuth 2.0ポリシーの適用」を参照してください

  4. APIをデプロイします。

OAuthプロファイルXMLファイル

OAuthプロファイルXMLファイルを構成する方法を学習します。 ゲートウェイ・ノードは、このファイルを使用して、クライアントがOAuth 2.0ポリシーによって保護されているAPIにリクエストを送信するアクセス・トークンを認証します。

updateoauthprofileゲートウェイ・インストーラ・アクションまたは「Oracle API Platform Cloud Serviceのゲートウェイ・コントローラのREST API」「セキュリティ・プロファイルの更新」操作を使用して、OAuthプロファイルをゲートウェイ・ノードにアップロードします。

要素 説明

Name

使用するOAuthプロファイルのタイプ。 サポートされる値は、DEFAULTFORGEROCK_OPENAMです。 Oracle Identity Cloud Serviceは、DEFAULTプロファイルを使用できます。

FORGEROCK_OPENAMプロファイルは非推奨であり、将来のリリースで削除される予定です。

Issuer

アイデンティティ・プロバイダ発行者。

HeaderNameIDToken

IDトークンの渡しに使用するヘッダー・クライアントを指定します。 これは、OAuthプロバイダが2つのトークンを作成する場合に便利です: アクセス・トークンとIDトークン。

HeaderNameIDTokenは非推奨であり、将来のリリースで削除される予定です。

AudienceRestrictionFromConfig

trueに設定すると、アクセス・トークンのオーディエンス制限は、Audience要素のアイテムに従って適用されます。 falseに設定すると、アクセス・トークンが使用されるURIパスを介してオーディエンス制限が適用されます。

AudienceRestrictionUsingLBR

trueに設定すると、OAuthポリシーは、ホスト名がロード・バランサURLである完全なURLに基づいてオーディエンス制限検証を実行します。 falseに設定すると、OAuthポリシーは、サービスが消費されるパス情報のみに基づいてオーディエンス制限検証ベースを実行します。 本番システムでこのフラグをtrueに設定することをお勧めします。

ノート:

この要素がtrueに設定されている場合は、AudienceRestrictionEntireUrlMatch要素をtrueに設定する必要があります。

AudienceRestrictionEntireUrlMatch

この要素がtrueに設定されている場合、APIの消費URL全体がクレーム・セットで定義されたオーディエンスから始まる場合、OAuthポリシーはオーディエンス制限の検証を実行します。

Audience

AudienceRestrictionFromConfigtrueの場合、トークンにはこの要素にリストされているオーディエンスが含まれている必要があります。 複数のオーディエンスをパイプ( | )で区切ります。

MandatoryClaims

JWTがアクセス・トークン内に含める必要がある要求のリスト。

PublicCertLocation

ゲートウェイがアイデンティティ・プロバイダの認証に使用する公開キーを含みます。 useFormat属性を設定して、使用するキーのタイプを指定します。 PEMFormatPubKey, X509FormatPubKey, JWKFormatPubKeyおよびNONEは、このリリースでサポートされているキー・タイプです。

PEMFormatPubKey

PEM形式の公開鍵。 PublicCertLocation要素でuseFormatPEMFormatPubKeyに設定されている場合にのみ必要です。

X509FormatPubKey

X509形式の公開キー。 PublicCertLocation要素でuseFormatX509FormatPubKeyに設定されている場合にのみ必要です。

JWKFormatPubKey

JWK形式の公開キー。 PublicCertLocation要素でuseFormatJWKFormatPubKeyに設定されている場合にのみ必要です。

ノート:

JWKFormatPublicKeyには、kid属性があります。 この属性は、JWKセットに適したJWKを選択するように設定されます。 この属性が定義されていない場合は、最初のJWKがJWTトークンの検証に使用されます。

OutOfBandVerifyAlgorithm

この要素は、JWAをRS256に限定するようにJWTを制限する必要があります。 JWA=ES256でトークンが送信された場合、JWTは拒否されます。 この要素をRS256に設定します。

ScopeClaimName

この要素は、デフォルトのスコープ・クレーム名を"スコープ"から顧客定義のスコープ・クレーム名に上書きするように定義されています。

ScopeClaimDataType

デフォルトでは、JWTのスコープ値はスペース区切りです。 スコープ要求値はJSON構造としても提供できます。

この要素には2つの有効な値があります: SPACE_SEPARATED_VALUESおよびJSON デフォルトでは、JWTのスコープ値はスペース区切りであるため、デフォルト値はSPACE_SEPARATED_VALUESです。 スコープ・クレーム値がJSON構造を持つ場合、ScopeClaimDataTypeの値はJSONに設定する必要があります。

以下に説明するように、注意すべき3つの追加機能があります。

  • HTTPSチャネルでJWA=NONEを許可

    この機能により、JWTのシグネチャを検証せずにJWTをアサートできます。 中間者攻撃を防ぐために、JWTは安全なチャネルでのみ送信する必要があります。 JWTが安全なチャネルを介して送信されない場合、JWTは拒否されます。 JWT=Noneを許可するには、要素PublicCertLocationuseFormat属性をNONEに設定する必要があります。

    <PublicCertLocation useFormat="NONE">
    </PublicCertLocation>
  • JWAをRS256のみに制限

    この機能は、JWAをRS256に限定するためにJWTを制限するために必要です。 JWA=ES256でトークンが送信された場合、JWTは拒否されます。 この機能を実装するには、OAuthプロファイルに次のXML要素を設定する必要があります。

    <OutOfBandVerifyAlgorithm>RS256</OutOfBandVerifyAlgorithm>
  • OAuthポリシー内では、JSON webトークンに存在するKID(キーID)に基づいてJSON webキーを選択できます。 何らかの理由でKIDがJSON webトークンに存在しない場合は、OAuthプロファイル自体の一部としてKIDを設定することができます。 この機能を使用して、JSONトークンの一部として提供されるKIDを上書きすることもできます。

サンプルOAuthプロファイル

このサンプルOAuthプロファイルXMLファイルを、ゲートウェイ・ノードにアップロードする前に、OAuth実装と一致するように編集します。

「Oracle API Platform Cloud Serviceのゲートウェイ・コントローラのREST API」updateoauthprofileアクションまたは「セキュリティ・プロファイルの更新」操作を参照してください。

<OAuth2TokenLocalEnforcerConfig>
	<Name>DEFAULT</Name>
	<HeaderNameIDToken>IDToken</HeaderNameIDToken>
	<Issuer>https://identity.oraclecloud.com/</Issuer>
	<AudienceRestrictionFromConfig>true</AudienceRestrictionFromConfig>
	<Audience>http://example:8001|OAuthTestApp</Audience>
	<MandatoryClaims></MandatoryClaims>
	<!-- useFormat has 2 values  PEMFormatPubKey, X509FormatPubKey -->
	<PublicCertLocation useFormat='X509FormatPubKey'>
		<X509FormatPubKey>MIICUDCCAbmgAwIBAgIELfGcXDANBgkqhkiG9w0BAQUFADBXMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGb3JhY2xlMRUwEwYKCZImiZPyLGQBGRYFY2xvdWQxETAPBgNVBAMTCENsb3VkOUNBMB4XDTE1MTEyMDA5MzI0OFoXDTI1MTExNzA5MzI0OFowXzETMBEGCgmSJomT8ixkARkWA2NvbTEWMBQGCgmSJomT8ixkARkWBm9yYWNsZTEVMBMGCgmSJomT8ixkARkWBWNsb3VkMRkwFwYDVQQDDBBvcmNsTVQxMjMyMzJfaWRtMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLVvyue+qFraxwM5LxaNLt2QH3wHn/n0+yk2jmP7mpYkz1xrKuEk2e2SCggzK8MT9jJ5VUaNlF0MwhIZ8/naxA5LPCzGEVfZ/41GPtGNADFyspqGHkdsNv+M2eCBme7MDp9L3noBtt2peqGqxSu0DHyt1wgNr6p6EXqTT4AbLdyQIDAQABoyEwHzAdBgNVHQ4EFgQU2rtogHKC0/ws2dS3Zq7s9wwMofkwDQYJKoZIhvcNAQEFBQADgYEAK1jtcbRpYFAl2Bp9X02MaA/igq3WXykizH7uQvrWgNQluf7ADbxaB7J96jaIN2GLQFxl6cbPwOvBIu7xd9a26eK6F5gq4iJKm7GeOgV5PZ4r5umvSZgA0aLOAbhZ/gwy40RauF0X+4I7JqamnV0DizM2YEDsFWKfTSvCy90ZizMwggJeMIIBx6ADAgECAgRgdcJQMA0GCSqGSIb3DQEBBQUAMFcxEzARBgoJkiaJk/IsZAEZFgNjb20xFjAUBgoJkiaJk/IsZAEZFgZvcmFjbGUxFTATBgoJkiaJk/IsZAEZFgVjbG91ZDERMA8GA1UEAxMIQ2xvdWQ5Q0EwIBcNMTUxMTE5MTIwMDQyWhgPMjExNTEwMjYxMTAwNDJaMFcxEzARBgoJkiaJk/IsZAEZFgNjb20xFjAUBgoJkiaJk/IsZAEZFgZvcmFjbGUxFTATBgoJkiaJk/IsZAEZFgVjbG91ZDERMA8GA1UEAxMIQ2xvdWQ5Q0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJeXcnReWfVIhqdedQKy+qi+tMp2NstgxHWisJ6OZf7O+KC9WzP+X+UwiQTMUzp+B4UWUEbpGNW7dv7jiyKdsgYGrnpwINl6OT4wrlKD8r2+7yQLNBsvDQjVeWmhHTqFfgqTfd/wi3MC2itft+I40O4GnSL3/VDcTSxJZMaigKizAgMBAAGjNTAzMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPwqb7nQaKEVc+oSa7ohvOxIGMfXMA0GCSqGSIb3DQEBBQUAA4GBADydG93z/CGRVfUyVfD/ULT/d+RYfm3sriGgPPZlEO+idCgA6tEMcnIOFf3lP5CFAdFq6ykmFHMOf15CYvqkv7jZULiL3zMgy7OgB4I0i0WMUAAybqeiZlU90y86zd2yfAgQEM4ncUCHg+Dwf2XF0qmYK0XLF7CSb/hSEJJp4W2j</X509FormatPubKey>
	</PublicCertLocation>
</OAuth2TokenLocalEnforcerConfig>