Obtener un código de autorización

SE APLICA A: todos los niveles de API Management

Use la directiva get-authorization-context para obtener el contexto de autorización de una conexión especificada (que anteriormente se denominaba autorización) a un proveedor de credenciales configurado en la instancia de API Management.

La directiva captura y almacena los tokens de autorización y actualización del proveedor de autorización configurado que usa la conexión.

Nota:

Establezca los elementos de la directiva y los elementos secundarios en el orden proporcionado en la instrucción de directiva. Obtenga más información sobre el establecimiento o modificación de directivas de API Management.

Instrucción de la directiva

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

Atributos

Atributo Descripción Necesario Valor predeterminado
provider-id Identificador de recursos del proveedor de credenciales. Se permiten expresiones de directiva. N/D
authorization-id Identificador de recursos de la conexión. Se permiten expresiones de directiva. N/D
context-variable-name El nombre de la variable de contexto que se va a recibir el Authorization objeto. Se permiten expresiones de directiva. N/D
identity-type El tipo de identidad que se debe comprobar con la directiva de acceso de la conexión.
- managed: identidad asignada por el sistema de la instancia de API Management.
- jwt: token de portador JWT especificado en el atributo identity.

Se permiten expresiones de directiva.
No managed
identidad Un token de portador JWT de Microsoft Entra que se debe comprobar con los permisos de conexión. Se omite para los identity-type que no sean jwt.

Notificaciones esperadas:
- público: https://azure-api.net/authorization-manager
- oid: id. de objeto de permiso
- tid: Identificación de inquilino de permiso

Se permiten expresiones de directiva.
No N/D
ignore-error booleano. Si la adquisición del contexto de autorización produce un error (por ejemplo, no se encuentra el recurso de conexión o está en un estado de error):
- true: a la variable de contexto se le asigna un valor NULL.
- false: devuelve 500

Si establece el valor en false y la configuración de directiva incluye una sección on-error, el error está disponible en la propiedad context.LastError.

Se permiten expresiones de directiva.
No false

Objeto de autorización

La variable de contexto de autorización recibe un objeto de tipo Authorization.

class Authorization
{
    public string AccessToken { get; }
    public IReadOnlyDictionary<string, object> Claims { get; }
}
Nombre de propiedad Descripción
AccessToken Token de acceso de portador para autorizar una solicitud HTTP de back-end.
Notificaciones Notificaciones devueltas por la API de respuesta de token del servidor de autorización (consulte RFC6749#section-5.1).

Uso

Notas de uso

  • Configure identity-type=jwt cuando la directiva de acceso de la conexión se asigne a una entidad de servicio. Solo se admiten ámbitos de solo aplicación /.default para JWT.

Ejemplos

Recuperación del token

<!-- 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>

Recuperación del token con atributos establecidos dinámicamente

<!-- 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>

Adjuntar el token a la llamada de back-end

<!-- 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>

Obtener el token de la solicitud entrante y devolver el token

<!-- 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>

Para más información sobre el trabajo con directivas, vea: