我可以在 ASP.NET Core 2.0 API 中使用访问令牌和身份令牌吗?

Can I use Access Tokens and Identity Tokens in my ASP.NET Core 2.0 API?

我正在开发 ASP.NET Core 2.0 API。目前,此 API 支持服务到服务工作流,其中客户端控制台应用程序使用其控制台应用程序的 Azure AD 应用注册 AppId/AppKey 值从 Azure AD 获取访问令牌。

为了支持这一点,我的 API 使用...

        // Add Azure AD OAUTH2.0 Authentication Services
        services.AddAuthentication(sharedOptions =>
        {
            sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddAzureAdBearer(options => Configuration.Bind("AzureAd", options));

在 Startup.cs ConfigureServices 方法和...

        app.UseAuthentication();

在 Startup.cs 配置方法中。最后...

[Authorize]

属性以及...

using Microsoft.AspNetCore.Authorization;

在我的控制器中使用语句。

现在一切正常。

但是,我现在需要允许管理员 Web 应用程序访问我的 API。此管理 Web 应用程序将使用 Azure AD 对用户登录进行身份验证并获取身份令牌。我希望我的 API 也能够接受此身份令牌;

  1. 允许访问 API,并且
  2. 允许我的 API 识别用户并在 API 中做出决定 基于用户身份的声明。

Core 2.0 能否在不破坏我目前使用服务到服务工作流的情况下同时支持访问令牌和身份令牌?

这应该可以正常工作 - 您的上述细分需要一些小的调整:

控制台应用程序 获取基于 API 密钥的简单访问令牌 - 访问令牌不是特定于用户的,代表应用程序身份。

管理员网络应用程序 用户登录并获得 id_token 和 access_token。 id_token 仅被 Web 应用程序用作身份验证证明,从未发送到任何地方。 access_token 是用户特定的,可用于调用 API 并获取个性化数据。

API API 的工作是接收访问令牌并根据来自令牌的声明进行授权。对于控制台应用程序,声明将仅通过 'client id' 声明包含应用程序标识。对于网络应用程序,您还可以识别用户 - 最常见的是通过 'sub' 声明(可能还有其他用户声明,例如电子邮件)。