由 Azure Active Directory v1 保护的 asp.net 核心 webapi

Posted

技术标签:

【中文标题】由 Azure Active Directory v1 保护的 asp.net 核心 webapi【英文标题】:asp.net core webapi secured by Azure Active Directory v1 【发布时间】:2017-11-25 00:49:39 【问题描述】:

我有一个应用程序,它在前端使用 React,在后端使用 asp.net core webapi。

为了保护前端,我使用了 adal.js,它运行良好。我可以获得令牌和我需要的所有信息。

问题是我想将令牌传递给 webapi,它应该允许或阻止请求。过去有 nuget Microsoft.Owin.Security.ActiveDirectory 效果很好,但现在看来我应该使用 Microsoft.AspNetCore.Authentication.JwtBearer 并且情况不同了。

我已在经典 Azure 门户中设置客户端/api 应用程序,并授予对 api 的访问权限以验证客户端的令牌。

这是我的 Startup.cs 的样子:

        app.UseJwtBearerAuthentication(new JwtBearerOptions
        
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            Authority = ConfigurationManager.AppSettings["ida:AADInstance"] + ConfigurationManager.AppSettings["ida:TenantId"],
            Audience = ConfigurationManager.AppSettings["ida:Audience"],
        );

当我尝试使用 [Authorize] 属性访问 webapi 控制器时(使用不记名令牌传递授权标头),我收到以下错误:

Microsoft.AspNetCore.Hosting.Internal.WebHost:信息:请求开始 HTTP/1.1 POST http://localhost:44304/api/v1/Temp 0 Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:信息:无法验证令牌eyJ0eXAiOiJK...

Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:IDX10500:签名验证失败。没有提供安全密钥来验证签名。 在 System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(字符串令牌,TokenValidationParameters 验证参数) 在 System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(字符串令牌,TokenValidationParameters 验证参数,SecurityToken 和验证令牌) 在 Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.d__1.MoveNext()

我已经尝试了所有不同的设置,但似乎都不起作用。我找到的资源与 Azure AD B2C 或 Azure AD v2 端点有关,因为由于 adal.js,我仍在使用“经典”,我找不到任何可以帮助我的东西。

有什么线索吗?提前致谢。

PS:由于我还在开发中,SSL 证书是无效的。我不确定它是否与此错误有关。

更新

在实施@Saca 答案后,我现在收到以下错误:

Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:信息:用户授权失败:(null)。 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:信息:过滤器“Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter”处的请求授权失败。 Microsoft.AspNetCore.Mvc.ChallengeResult:信息:使用身份验证方案执行 ChallengeResult ()。 Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:信息:AuthenticationScheme:Bearer 被质询。

【问题讨论】:

您能否提供指向您所指的@Saca 答案的链接,或者如果将其删除,请简要解释他的答案?我遇到了完全相同的问题... 他好像删除了评论。不幸的是,我无法再访问代码了。但我很乐意为您提供帮助,请通过 twitter @thdotnet 联系我 【参考方案1】:

经过一下午的尝试,这里的解决方案是:

在我的 Startup.cs 中,我在 app.UseCors(CorsPolicy); 之前设置了 AD 内容

我只是切换,现在它工作正常。

【讨论】:

以上是关于由 Azure Active Directory v1 保护的 asp.net 核心 webapi的主要内容,如果未能解决你的问题,请参考以下文章

努力让 Playwright 使用 Azure Active Directory 条件访问

Azure Active Directory 如何支持将 Okta 作为 IDP 进行联合?

Azure B2C 来宾(外部 Azure Active Directory)X 成员(联合 Azure Active Directory)

Azure-Azure Active Directory(AAD)

text Azure Active Directory身份验证

Azure *** 客户端 Azure Active Directory 身份验证