取得授權內容
適用於:所有 APIM 層
使用 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 執行個體中啟用系統指派的受控識別。 - jwt :identity 屬性中指定的 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>
相關原則
相關內容
如需使用原則的詳細資訊,請參閱:
- 教學課程:轉換及保護 API
- 原則參考,取得原則陳述式及其設定的完整清單
- 原則運算式
- 設定或編輯原則
- 重複使用原則設定
- 原則程式碼片段存放庫 (英文)
- 使用 Microsoft Azure Copilot 撰寫原則