다음을 통해 공유


권한 부여 컨텍스트 가져오기

적용 대상: 모든 API Management 계층

get-authorization-context 정책을 사용하여 API Management 인스턴스에 구성된 자격 증명 공급자에 대해 지정된 연결(이전의 권한 부여)의 권한 부여 컨텍스트를 가져옵니다.

정책은 연결을 사용하여 구성된 권한 부여 공급자로부터 권한 부여 및 새로 고침 토큰을 가져오고 저장합니다.

참고 항목

정책 문에 제공된 순서대로 정책의 요소 및 자식 요소를 설정합니다. 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" />

특성

특성 설명 필수 항목 기본값
provider-id 자격 증명 공급자 리소스 식별자 정책 식이 허용됩니다. 해당 없음
authorization-id 연결 리소스 식별자 정책 식이 허용됩니다. 해당 없음
context-variable-name Authorization 개체를 받을 컨텍스트 변수의 이름입니다. 정책 식이 허용됩니다. 해당 없음
identity-type 연결의 액세스 정책에 대해 확인할 ID 유형
- managed: API Management 인스턴스의 시스템 할당 관리 ID입니다.
- jwt: identity 특성에 지정된 JWT 전달자 토큰입니다.

정책 식이 허용됩니다.
아니요 managed
identity 연결 권한을 확인할 Microsoft Entra JWT 전달자 토큰입니다. jwt 이외의 identity-type에 대해서는 무시됩니다.

예상 클레임:
- 대상 그룹: https://azure-api.net/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>

정책 작업에 대한 자세한 내용은 다음을 참조하세요.