Web API を呼び出す Web API: アプリのトークンを取得する

クライアント アプリケーション オブジェクトを構築した後、それを使用して、Web API を呼び出すために使用できるトークンを取得します。

コントローラーのコード

Microsoft.Identity.Web には、Microsoft Graph またはダウンストリーム Web API を呼び出す便利なサービスを提供する拡張メソッドが追加されています。 これらのメソッドの詳細については、「Web API を呼び出す Web アプリ: API を呼び出す」を参照してください。 これらのヘルパー メソッドを使用すれば、トークンを手動で取得する必要はありません。

ただし、トークンを手動で取得する場合は、ホーム コントローラーで取得することを目的とした Microsoft.Identity.Web の使用の例が、次のコードによって示されています。 これにより、REST API (Microsoft Graph SDK ではなく) を使用した、Microsoft Graph の呼び出しが行われます。 通常、トークンを取得する必要はありませんが、要求に追加する Authorization ヘッダーを作成する必要があります。 Authorization ヘッダーを取得するには、コントローラーのコンストラクター (Blazor を使用する場合はページ コンストラクター) 内での依存関係の挿入によって、IAuthorizationHeaderProvider サービスを挿入し、それをコントローラー アクションで使用します。 このインターフェイスには、プロトコル (Bearer や Pop など) とトークンを含む文字列を生成するメソッドが用意されています。 ユーザーに代わって API を呼び出す Authorization ヘッダーを取得するには、(CreateAuthorizationHeaderForUserAsync) を使用します。 アプリケーション自体に代わってダウンストリーム API を呼び出す Authorization ヘッダーを取得するには、デーモン シナリオで (CreateAuthorizationHeaderForAppAsync) を使用します。

これらのコントローラー メソッドは、[Authorize] 属性によって保護されていて、認証された呼び出しのみのに Web API の使用が確実に許可されます。

[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 メソッドの詳細については、「Web API を呼び出す Web API: API の呼び出し」を参照してください。

次のステップ

このシナリオの次の記事である API の呼び出しに関する記事に進みます。