我很难尝试使用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
});
但这也行不通。将不胜感激任何帮助。
修改
我在Visual Studio日志中发现以下错误:
Bearer未经过身份验证。失败消息:IDX10501:签名 验证失败。无法匹配'kid':'...'
答案 0 :(得分:8)
授权=配置["身份验证:AzureAd:AADInstance"] +配置["身份验证:AzureAd:TenantId"]
请求被发送到以下地址:
https://login.microsoftonline.com/MYTENANTID/.well-known/openid-configuration
上面有两个问题:
https://login.microsoftonline.com/MYTENANTID/的 2.0 强> /。众所周知/ OpenID的配置
我设法让它与删除"权限"参数并将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"],
});