다음을 통해 공유


웹 API를 호출하는 웹 API: 앱에 대한 토큰 획득

클라이언트 애플리케이션 개체를 빌드한 후 이 개체를 사용하여 웹 API를 호출하는 데 사용할 수 있는 토큰을 획득합니다.

컨트롤러의 코드

Microsoft.Identity.Web은 Microsoft Graph 또는 다운스트림 웹 API를 호출하기 위한 편리한 서비스를 제공하는 확장 메서드를 추가합니다. 해당 메서드는 웹 API를 호출하는 웹앱: API 호출에 자세히 설명되어 있습니다. 이러한 도우미 메서드를 사용하면 토큰을 수동으로 가져올 필요가 없습니다.

그러나 토큰을 수동으로 가져오려는 경우 다음 코드는 home 컨트롤러에서 Microsoft.Identity.Web을 사용하여 이 작업을 수행하는 예를 보여 줍니다. 이 코드는 Microsoft Graph SDK 대신 REST API를 사용하여 Microsoft Graph를 호출합니다. 일반적으로 토큰을 가져올 필요는 없으며 요청에 추가할 인증 헤더를 빌드해야 합니다. 인증 헤더를 가져오려면 컨트롤러 생성자(또는 Blazor를 사용하는 경우 페이지 생성자)에서 종속성 삽입을 통해 IAuthorizationHeaderProvider 서비스를 삽입하고 이를 컨트롤러 작업에서 사용합니다. 이 인터페이스에는 프로토콜(전달자, Pop 등)과 토큰이 포함된 문자열을 생성하는 메서드가 있습니다. 사용자를 대신하여 API를 호출하기 위한 인증 헤더를 가져오려면 (CreateAuthorizationHeaderForUserAsync)를 사용합니다. 애플리케이션 자체를 대신하여 다운스트림 API를 호출하기 위한 인증 헤더를 가져오려면 디먼 시나리오에서 (CreateAuthorizationHeaderForAppAsync)를 사용합니다.

컨트롤러 메서드는 인증된 호출만 웹 API를 사용할 수 있도록 하는 [Authorize] 특성에 의해 보호됩니다.

[Authorize]
public class MyApiController : Controller
{
    /// <summary>
    /// The web API will accept only tokens 1) for users, 2) that have the `access_as_user` scope for
    /// this API.
    /// </summary>
    static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };

     static readonly string[] scopesToAccessDownstreamApi = new string[] { "api://MyTodolistService/access_as_user" };

     readonly IAuthorizationHeaderProvider authorizationHeaderProvider;

    public MyApiController(IAuthorizationHeaderProvider authorizationHeaderProvider)
    {
      this.authorizationHeaderProvider = authorizationHeaderProvider;
    }

    [RequiredScopes(Scopes = scopesToAccessDownstreamApi)]
    public IActionResult Index()
    {
        // Get an authorization header.
        IAuthorizationHeaderProvider authorizationHeaderProvider = this.GetAuthorizationHeaderProvider();
        string[] scopes = new string[]{"user.read"};
        string authorizationHeader = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);

        return await callTodoListService(authorizationHeader);
    }
}

callTodoListService 메서드에 대한 자세한 내용은 웹 API를 호출하는 웹 API: API 호출을 참조하세요.

다음 단계

이 시나리오의 다음 문서인 API를 호출로 이동합니다.