次の方法で共有


認可コンテキストを取得する

適用対象: すべての 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 を参照)。

使用

使用上の注意

  • 接続のアクセス ポリシーがサービス プリンシパルに割り当てられる際に、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>

ポリシーに対する処理の詳細については、次のトピックを参照してください。