【问题标题】:How to Validate OpenID Connect Access Token generated by Azure AD v2 in ASP.NET core WEB API?如何在 ASP.NET 核心 WEB API 中验证 Azure AD v2 生成的 OpenID Connect 访问令牌?
【发布时间】:2020-02-25 05:18:20
【问题描述】:

如何在 ASP.NET 核心 WEB API 中验证 Azure AD (v2!!!) 生成的 OpenID Connect 访问令牌?

场景是:

我有一个 Angular 8 客户端应用程序,它在登录后获取 OpenID Connect 访问令牌。 客户端可以连同访问令牌一起调用 API。 但问题是,我应该如何在 ASP.NET 核心 API 中验证该 Token?

使用此代码,我得到一个没有任何描述的授权错误。

  services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
             .AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

        services.AddCors(options =>
        {
            options.AddDefaultPolicy(
                builder =>
                {
                    builder.AllowAnyOrigin();
                    builder.AllowAnyMethod();
                    builder.AllowAnyOrigin();
                    builder.AllowAnyHeader();
                });
        });

Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:信息:授权失败。 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:信息:过滤器“Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter”处的请求授权失败。 Microsoft.AspNetCore.Mvc.ChallengeResult:信息:使用身份验证方案执行 ChallengeResult ()。 Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler:Information: AuthenticationScheme: AzureADJwtBearer 受到挑战。

"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "localhost",
"TenantId": "myTenantId",
"ClientId": "myClientId"

},

【问题讨论】:

  • 请验证配置文件

标签: c# angular azure-active-directory asp.net-core-webapi openid-connect


【解决方案1】:

Domain 不是 localhost 。仅当您想接受来自单个租户的访问令牌时才需要指定 TenantId。否则,您可以将它们设置为common

This value can be:
- A GUID (Tenant ID = Directory ID)
- 'common' (any organization and personal accounts)
- 'organizations' (any organization)
- 'consumers' (Microsoft personal accounts)

您应该更改为使用 Microsoft 标识平台端点(Azure AD V2.0 端点),方法是将此代码添加到 Startup.cs 文件:

services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
    // This is a Microsoft identity platform web API.
    options.Authority += "/v2.0";

    .....
});

详细解释和代码示例可以点击here

【讨论】:

  • 超级!谢谢您的帮助。现在可以了。是否可以仅在 ASP.NET 核心后端而不在 Angular 端控制身份验证?如果不。我可以在我的 SPA 客户端中使用授权代码流而不是隐式流吗?
  • >是否可以仅在 ASP.NET 核心后端而不在 Angular 端控制身份验证? Web api 不控制身份验证。 > 我可以在我的 SPA 客户端中使用授权代码流而不是隐式流吗?代码流需要使用客户端密码向 azure ad token 端点发送 post 请求,这在 spa 客户端中是不可靠/不安全的。
  • 感谢您的信息。我的意思是代码PKCE。它是否支持 Azure AD?
猜你喜欢
  • 2018-11-23
  • 2020-07-25
  • 2021-05-31
  • 1970-01-01
  • 2023-02-24
  • 2023-04-04
  • 2019-11-14
  • 2018-01-08
  • 2015-12-22
相关资源
最近更新 更多