取得授權內容

適用於:所有 API 管理 層

使用 get-authorization-context 原則,取得 APIM 執行個體中所設定之指定連線 (先前稱為「授權」) 到認證提供者的授權內容。

原則會透過連線,從設定的認證提供者擷取並儲存授權與重新整理權杖。

注意

請依照原則陳述式中提供的順序,來設定原則的元素和子元素。 深入了解如何設定或編輯 APIM 原則

原則陳述式

<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" />

屬性

屬性 描述 是必要欄位 預設
provider-id 認證提供者資源識別碼。 允許原則運算式。 Yes N/A
authorization-id 連線資源識別碼。 允許原則運算式。 Yes N/A
context-variable-name 要接收 Authorization 物件的內容變數名稱。 允許原則運算式。 Yes N/A
identity-type 檢查連線存取原則的身分識別類型。
- managed:在 APIM 執行個體中啟用系統指派的受控識別。
- jwtidentity 屬性中指定的 JWT 持有人權杖。

允許原則運算式。
No managed
身分 檢查連線權限的 Microsoft Entra JWT 持有人權杖。 忽略 identity-type 以外的 jwt

預期的宣告:
- 對象:https://azure-api.net/authorization-manager
- oid:權限物件識別碼
- tid:權限租用戶識別碼

允許原則運算式。
No N/A
ignore-error 布林值。 如果取得授權內容會導致錯誤 (例如,找不到連線資源,或處於錯誤狀態):
- true:會向內容變數指派 null 的值。
- false:傳回 500

如果將值設定為 false,且原則設定包含 on-error 區段,則可以在屬性 context.LastError 屬性中使用錯誤。

允許原則運算式。
No false

授權物件

授權內容變數會接收類型 Authorization 的物件。

class Authorization
{
    public string AccessToken { get; }
    public IReadOnlyDictionary<string, object> Claims { get; }
}
屬性名稱 描述
AccessToken 持有人存取權杖以授權後端 HTTP 要求。
宣告 從授權伺服器的權杖回應 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>

如需使用原則的詳細資訊,請參閱: