Azure AD B2C error - IDX10501: Signature validation failed
我在尝试使用Azure AD B2C验证My Web API时遇到困难。
我将从一些背景开始
我创建了使用Azure AD B2C对用户进行身份验证的移动应用程序。我正在创建一个显示以下URL的WebView:
要求用户登录到azure广告,如果登录数据成功,则我收到包含访问令牌的响应-这部分进行得很顺利,一切正常。
现在,我想创建后端Web Api。我创建了ASP NET Core Web应用程序,该应用程序允许我选择身份验证方法。我选择Azure AD身份验证,因此模板为我生成了所有必需的数据。代码中的相关部分在这里:
我更新了所有必需的配置属性以匹配我的天蓝色设置。在这一点上,我希望能够使用在移动应用程序上收到的访问令牌来调用API。我在本地运行移动应用程序,登录后收到访问令牌,将其复制并尝试使用邮递员(授权标头为" Bearer ...")调用我的Web api(托管在IIS express中)。不幸的是没有运气-我收到带有以下标头的401:
Bearer error="invalid_token", error_description="The signature key was
not found"
我认为令牌足以授权API-我理解这是OAuth的重点。我想念什么吗?我应该有一些其他配置吗?我注意到配置缺少登录策略(这似乎是AD B2C名称所必需的,因此我尝试添加以下内容:
1 2 3 4 5 6 7 8 9 10 11 | var validationParameters = new TokenValidationParameters { AuthenticationType ="MY_POLICY", }; app.UseJwtBearerAuthentication(new JwtBearerOptions { Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], Audience = Configuration["Authentication:AzureAd:Audience"], TokenValidationParameters = validationParameters }); |
但是这也不起作用。将不胜感激。
编辑
我在Visual Studio日志中发现以下错误:
Bearer was not authenticated. Failure message: IDX10501: Signature
validation failed. Unable to match 'kid': '...'
@juunas评论可以帮助我发现问题。我用提琴手检查了传出的请求,并通过这段代码发现了这一点:
Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"]
请求已发送到以下地址:
https://login.microsoftonline.com/MYTENANTID/.well-known/openid-configuration
以上有两个问题:
https://login.microsoftonline.com/MYTENANTID/v2.0/.well-known/openid-configuration
我设法通过删除" Authority"参数并将其配置auth函数更改为以下内容来工作:
1 2 3 4 5 6 7 | app.UseJwtBearerAuthentication(new JwtBearerOptions { MetadataAddress = string.Format("https://login.microsoftonline.com/{0}/v2.0/.well-known/openid-configuration?p={1}", Configuration["Authentication:AzureAd:TenantId"],"MYPOLICY"), AuthenticationScheme ="MYPOLICY", Audience = Configuration["Authentication:AzureAD:ClientId"], }); |