Rich Authorization Requests(RAR)を使った認可コードフロー
Rich Authorization Requests (RAR)(リッチ認可要求(RAR))はOAuth2プロトコルを拡張し、クライアントが認可コードフロー中にエンドユーザーなどのリソース所有者にきめ細かな認可データを要求して取得する方法を提供します。
従来のOAuth2フローでは、通常、クライアントはリソースサーバーから一連のスコープへのアクセスを要求し、リソース所有者はそれらのリソースへのアクセスをクライアントに許可します。ただし、このアプローチでは、クライアントに許可されたアクセスをきめ細かく制御できず、アクセスの過剰プロビジョニングにつながる可能性があります。これにより、セキュリティリスクが発生する可能性があります。
RARを使用すると、クライアントはauthorization_details
パラメーターを渡して、アクセスするリソースごとに特定の権限を要求できます。これにより、アクセスをよりきめ細かく制御でき、過剰プロビジョニングに関連するセキュリティリスクを軽減できます。
全体として、RARはOAuth2プロトコルの強力な拡張機能であり、クライアントとリソース所有者の両方に対して、リソースアクセスに対するセキュリティと制御を強化します。
どのように使用すればよいですか?
API用にconfigure RAR(RARを構成)した後、/par
エンドポイントに渡される要求にauthorization_details
パラメーターを追加できます。パラメーターはオブジェクトの配列です。各オブジェクトにはtypeフィールドが必要ですが、型は配列内で一意である必要はありません。認可コードフローを使用した例を次に示します。
curl --location 'https://$tenant/oauth/par' \
--request POST \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=$client_id' \
--data-urlencode 'client_secret=$client_secret' \
--data-urlencode 'redirect_uri=https://jwt.io' \
--data-urlencode 'audience=urn:my-api' \
--data-urlencode 'response_type=code' \
--data-urlencode 'authorization_details=[{"type": "money_transfer", "instructedAmount": {"amount": 2500, "currency": "USD"}, "sourceAccount": "xxxxxxxxxxx1234", "destinationAccount": "xxxxxxxxxxx9876", "beneficiary": "Hanna Herwitz", "subject": "A Lannister Always Pays His Debts"}]'
Was this helpful?
各authorization_details
要素は、type
フィールドが含まれている限り、完全にカスタムにすることができます。
次のコードサンプルに示すように、/oauth/token
エンドポイントで認可コードを交換すると、次のようになります。
POST https://$tenant/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&client_id=[CLIENT_ID]&client_secret=[CLIENT_SECRET]&code=[AUTHZ_CODE]&redirect_uri=https://jwt.io
Was this helpful?
アクセストークンとauthorization_details
配列を含む応答を受け取ります。
{
"access_token": "ey...ZQ",
"expires_in": 86400,
"authorization_details": [
{
"type": "money_transfer",
"instructedAmount": {"amount": 2500, "currency": "USD"},
"sourceAccount": "xxxxxxxxxxx1234",
"destinationAccount": "xxxxxxxxxxx9876",
"beneficiary": "Hanna Herwitz",
"subject": "A Lannister Always Pays His Debts"
}
],
"token_type": "Bearer"
}
Was this helpful?
authorization_details
配列は、クライアントがアクセストークンを検査することなく、付与された認可のスコープを理解するのに役立ちます。一般に、クライアントはアクセストークンを検査してはなりません。これは、IETF’s JSON Web Token Profile for OAuth 2.0 Access Tokens(IETFのOAuth 2.0アクセストークンのJSON Webトークンプロファイル)に詳細が記載されています。代わりに、リソースサーバーがアクセストークンを検査する必要があります。
要求されたオーディエンスが[JWE access tokens(JWEアクセストークン)]を使用するように構成されたAPIである場合、type
以外のすべてのフィールドは、/oauth/token
エンドポイントからの応答のauthorization_details
要素から削除されます。アクセストークンの要求は影響を受けません。
{
"iss": "https://my_tenant.auth0.com/",
"sub": "auth0|me",
"aud": "https://myapi.authzero.com",
"iat": 1683661385,
"exp": 1683747785,
"azp": "my_client",
"authorization_details": [
{
"type": "money_transfer",
"instructedAmount": {"amount": 2500, "currency": "USD"},
"sourceAccount": "xxxxxxxxxxx1234",
"destinationAccount": "xxxxxxxxxxx9876",
"beneficiary": "Hanna Herwitz",
"subject": "A Lannister Always Pays His Debts"
}
]
}
Was this helpful?
アクションでauthorization_detailsにアクセスします
標準プロトコルのサポートに加えて、event.transaction.requested_authorization_details
プロパティを使用して、ログイン後のアクション内のRARも公開します。このプロパティを使用して、多要素認証のステップアップなど、トランザクションに関する決定を行います。
Auth0がサポートしていないものは何ですか?
現時点では、Auth0は次のことをサポートしていません:
ActionsでのRARの更新。
クライアントが検出できるようにRARタイプのアドバタイズ。
APIで許可されているタイプと一致するtype
(タイプ)プロパティがあるかどうかのチェックを超えて、RARオブジェクトを検証します。詳細については、[Configure RAR(RARを構成)]を参照してください。