Maj*_*Dev 6 c# azure azure-active-directory azure-ad-b2c asp.net-core
我很难尝试使用Azure AD B2C来验证My Web API.我将从一些背景开始
我创建了使用Azure AD B2C对用户进行身份验证的移动应用程序.我正在创建一个显示此URL的WebView:

用户被要求登录azure广告,如果登录数据成功,我收到包含访问令牌的响应 - 这部分顺利进行,一切正常.
现在我想创建后端Web Api.我创建了ASP NET Core Web应用程序,它允许我选择身份验证方法.我选择Azure AD身份验证,以便模板为我生成所有必需的数据.代码中的相关部分在这里:

我更新了所有必需的配置属性以匹配我的azure设置.此时我希望能够使用我在移动应用程序上收到的访问令牌来调用API.我在本地运行移动应用程序,登录,接收访问令牌,复制它并尝试使用邮递员(带有授权标题"Bearer ...")来调用我的web api(在IIS express中托管).不幸的是没有运气 - 我收到401以下标题:
Bearer error ="invalid_token",error_description ="找不到签名密钥"
我认为令牌足以授权API - 我理解这是OAuth的一个重点.我错过了什么吗?我应该有一些额外的配置吗?我注意到配置缺少登录策略(这似乎是AD B2C名称所要求的,所以我尝试添加:
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
});
Run Code Online (Sandbox Code Playgroud)
但这也行不通.将不胜感激任何帮助.
编辑
我在Visual Studio日志中发现以下错误:
持票人未经过认证.失败消息:IDX10501:签名验证失败.无法匹配'kid':'...'
@juunas评论帮助我找到问题.我用fiddler检查了传出的请求,我发现用这段代码:
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"参数并将configure auth函数更改为以下内容:
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"],
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2689 次 |
| 最近记录: |