Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 由Azure Active Directory v1保护的asp.net核心webapi_Asp.net Core_Jwt_Azure Active Directory_Adal_Asp.net Core Webapi - Fatal编程技术网

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

Asp.net core 由Azure Active Directory v1保护的asp.net核心webapi,asp.net-core,jwt,azure-active-directory,adal,asp.net-core-webapi,Asp.net Core,Jwt,Azure Active Directory,Adal,Asp.net Core Webapi,我有一个应用程序,前端使用React,后端使用asp.net核心webapi 为了保证前端的安全,我使用了adal.js,它工作得很好。我可以得到令牌和我需要的所有信息 问题是我想将令牌传递给webapi,它应该允许或阻止请求。在过去,有一个nugetMicrosoft.Owin.Security.ActiveDirectory运行得很好,但现在我似乎应该使用Microsoft.AspNetCore.Authentication.JwtBearer,事情就不同了 我已经在经典Azure门户中设置

我有一个应用程序,前端使用React,后端使用asp.net核心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 0 Microsoft.AspNetCore.Authentication.JwtBearer.jwtbearermiddle软件:信息:无法验证令牌EYJ0EXAIIJK

Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:IDX10500:签名验证失败。没有提供安全密钥来验证签名。 位于System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(字符串令牌,令牌验证参数validationParameters) 位于System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(字符串令牌、令牌验证参数validationParameters、SecurityToken和ValidateToken) 在Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.d_u1.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.authorizationFilter”处的请求的授权失败。 Microsoft.AspNetCore.Mvc.ChallengeResult:信息:使用身份验证方案()执行ChallengeResult。
Microsoft.AspNetCore.Authentication.JwtBearer.jwtbearermiddle软件:信息:AuthenticationScheme:Bearer受到质疑。

经过一整个下午的尝试,解决方案如下:

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


我只是切换了一下,现在一切正常。

您能提供一个指向您所指的@Saca答案的链接吗?或者,如果他的答案被删除,请简要解释一下?我也有同样的问题…看来他删除了评论。不幸的是,我再也无法访问代码了。但我很乐意帮助你,在twitter@thdotnet上联系我