获取授权上下文
适用于:所有 API 管理层级
使用 get-authorization-context
策略获取凭据提供商的指定连接的授权上下文(预览版)(以前称为“授权”),该提供商是在 API 管理实例中配置的。
该策略使用连接从配置的凭据提供程序提取和存储授权和刷新令牌。
注意
按照策略声明中提供的顺序设置策略的元素和子元素。 详细了解如何设置或编辑 API 管理策略。
策略语句
<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 | 凭据提供程序资源标识符。 允许使用策略表达式。 | 是 | 空值 |
authorization-id | 连接资源标识符。 允许使用策略表达式。 | 是 | 空值 |
context-variable-name | 要接收 Authorization 对象的上下文变量的名称。 允许使用策略表达式。 |
是 | 空值 |
identity-type | 要针对连接的访问策略检查的标识类型。 - managed :API 管理实例的系统分配托管标识。 - jwt :identity 特性中指定的 JWT 持有者令牌。允许使用策略表达式。 |
否 | managed |
标识 | 要根据连接权限检查的 Microsoft Entra JWT 持有者令牌。 对于除 jwt 之外的 identity-type ,忽略此项。 预期声明: - audience: https://azure-api.cn/authorization-manager - oid :权限对象 ID- tid :权限租户 ID允许使用策略表达式。 |
否 | 空值 |
ignore-error | 布尔值。 如果获取授权上下文导致错误(例如,找不到授权资源或资源处于错误状态),请执行以下操作: - true :为上下文变量赋值 null。 - false :返回 500 如果将值设置为 false ,并且策略配置包含 on-error 部分,则错误在属性 context.LastError 中可用。允许使用策略表达式。 |
否 | 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
- 策略参考,其中提供了策略语句及其设置的完整列表
- 策略表达式
- 设置或编辑策略
- 策略示例