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

时间:2018-02-12 15:16:00

标签: oauth-2.0 azure-active-directory asp.net-core-2.0 openid-connect asp.net-core-webapi

我正在开发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 Configure方法中。最后......

[Authorize]

属性以及......

using Microsoft.AspNetCore.Authorization;

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

现在一切正常。

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

  1. 允许访问API,
  2. 允许我的API识别用户并在API中做出决定 根据用户身份的声明。
  3. ASP.NET Core 2.0是否支持访问令牌和身份令牌,而不会破坏我目前使用服务工作流的服务?

1 个答案:

答案 0 :(得分:1)

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

THE CONSOLE APP 获取基于API密钥的简单访问令牌 - 访问令牌不是特定于用户的,代表应用程序标识。

ADMIN WEB APP 用户登录并获取id_token 和access_token 。 id_token仅被Web应用程序用作身份验证的证据,从不发送到任何地方。 access_token是特定于用户的,可用于调用API并获取个性化数据。

API API的工作是接收访问令牌并根据令牌的声明进行授权。对于控制台应用程序,声明只会通过“客户端ID”包含应用程序标识。要求。对于网络应用程序,您还可以识别用户 - 最常见的是通过' sub'声明(可能还有其他用户声明,如电子邮件)。