認可コンテキストを取得する
適用対象: すべての API Management レベル
get-authorization-context
ポリシーを使用して、API Management インスタンスで構成されている資格情報プロバイダーへの指定された接続 (以前は承認と呼ばれる) の承認コンテキストを取得します。
ポリシーは、接続を使用して、構成された資格情報プロバイダーから承認トークンと更新トークンをフェッチして格納します。
Note
ポリシーの要素と子要素を、ポリシー ステートメントで指定された順序で設定します。 API Management ポリシーを設定または編集する方法について説明します。
ポリシー ステートメント
<get-authorization-context
provider-id="credential provider id"
authorization-id="connection id"
context-variable-name="variable name"
identity-type="managed | jwt"
identity="JWT bearer token"
ignore-error="true | false" />
属性
属性 | 説明 | 必要 | Default |
---|---|---|---|
provider-id | 資格情報プロバイダーのリソース識別子。 ポリシー式を使用できます。 | はい | 該当なし |
authorization-id | 接続リソース識別子。 ポリシー式を使用できます。 | はい | 該当なし |
コンテキスト変数名 | Authorization オブジェクトを受け取るコンテキスト変数の名前。 ポリシー式を使用できます。 |
はい | 該当なし |
identity-type | 接続のアクセス ポリシーに対して確認する ID の種類。 - managed : API Management インスタンスのシステム割り当てマネージド ID。 - jwt : identity 属性で 指定された JWT ベアラー トークン。ポリシー式を使用できます。 |
いいえ | managed |
ID | 接続アクセス許可と照合する Microsoft Entra JWT ベアラー トークン。 jwt 以外のidentity-type の場合は無視されます。 予想される要求: - 対象ユーザー: https://azure-api.net/authorization-manager - oid : アクセス許可オブジェクト ID - tid : アクセス許可テナント IDポリシー式を使用できます。 |
いいえ | 該当なし |
ignore-error | Boolean です。 認可コンテキストを取得するとエラーが発生する場合 (たとえば、接続リソースが見つからないか、エラー状態にある場合): - true : コンテキスト変数に null の値が割り当てられます。 - false : 500 を返します値を false に設定し、ポリシー構成に on-error セクションが含まれている場合、context.LastError プロパティでエラーを使用できます。ポリシー式を使用できます。 |
いいえ | false |
認可オブジェクト
Authorization コンテキスト変数は、型Authorization
のオブジェクトを受け取ります。
class Authorization
{
public string AccessToken { get; }
public IReadOnlyDictionary<string, object> Claims { get; }
}
プロパティ名 | 説明 |
---|---|
AccessToken | バックエンド HTTP 要求を承認するためのベアラー アクセス トークン。 |
Claims | 承認サーバーのトークン応答 API から返された要求 (RFC6749#section-5.1 を参照)。 |
使用
- ポリシー セクション: inbound
- ポリシー スコープ: グローバル、製品、API、操作
- ゲートウェイ: クラシック、v2、従量課金
使用上の注意
- 接続のアクセス ポリシーがサービス プリンシパルに割り当てられる際に、
identity-type=jwt
を構成します。 JWT では、/.default
アプリ専用スコープのみがサポートされています。
例
トークンを取得する
<!-- Add to inbound policy. -->
<get-authorization-context
provider-id="github-01"
authorization-id="auth-01"
context-variable-name="auth-context"
identity-type="managed"
ignore-error="false" />
<!-- Return the token -->
<return-response>
<set-status code="200" />
<set-body template="none">@(((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)</set-body>
</return-response>
動的に設定された属性を使用してトークンを取得する
<!-- Add to inbound policy. -->
<get-authorization-context
provider-id="@(context.Request.Url.Query.GetValueOrDefault("authorizationProviderId"))"
authorization-id="@(context.Request.Url.Query.GetValueOrDefault("authorizationId"))" context-variable-name="auth-context"
ignore-error="false"
identity-type="managed" />
<!-- Return the token -->
<return-response>
<set-status code="200" />
<set-body template="none">@(((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)</set-body>
</return-response>
バックエンド呼び出しにトークンをアタッチする
<!-- Add to inbound policy. -->
<get-authorization-context
provider-id="github-01"
authorization-id="auth-01"
context-variable-name="auth-context"
identity-type="managed"
ignore-error="false" />
<!-- Attach the token to the backend call -->
<set-header name="Authorization" exists-action="override">
<value>@("Bearer " + ((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)</value>
</set-header>
受信要求からトークンを取得し、トークンを返す
<!-- Add to inbound policy. -->
<get-authorization-context
provider-id="github-01"
authorization-id="auth-01"
context-variable-name="auth-context"
identity-type="jwt"
identity="@(context.Request.Headers["Authorization"][0].Replace("Bearer ", ""))"
ignore-error="false" />
<!-- Return the token -->
<return-response>
<set-status code="200" />
<set-body template="none">@(((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)</set-body>
</return-response>
関連ポリシー
関連するコンテンツ
ポリシーに対する処理の詳細については、次のトピックを参照してください。
- チュートリアル:API を変換および保護する
- ポリシー ステートメントとその設定の一覧に関するポリシー リファレンス
- ポリシー式
- ポリシーの設定または編集
- ポリシー構成を再利用する
- ポリシー スニペットのリポジトリ
- Azure で Microsoft Copilot を使用してポリシーを作成する