我已设置MSAL从Azure AD B2C获取令牌,设置dotnet核心WebAPI以接受JWT令牌。管理局端点指向WebApi:
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(jwtOptions =>
{
string tenant = Configuration["AzureAdB2C:Tenant"], policy = Configuration["AzureAdB2C:Policy"], clientId = Configuration["AzureAdB2C:ClientId"];
jwtOptions.Authority = $"https://login.microsoftonline.com/tfp/{tenant}/{policy}/v2.0/";
jwtOptions.Audience = clientId;
jwtOptions.Events = new JwtBearerEvents
{
OnAuthenticationFailed = AuthenticationFailed
};
});
根据样本。 MSAL配置为使用相同的策略和相同的客户端ID并接收令牌。
MSAL Authority - https://login.microsoftonline.com/tfp/{tenant}.onmicrosoft.com/{policy}/v2.0
。
但是,AuthFailed事件处理程序只返回
IDX10501: Signature validation failed. Unable to match keys.
并将auth作为401反弹。
我去寻找签名密钥,令牌的kid
与发现端点上列出的孩子不同。
https://login.microsoftonline.com/tfp/{tenant}/{policy}/discovery/v2.0/keys
有什么想法吗?
答案 0 :(得分:3)
似乎我没有选择正确的发卡行申请设置。 MSAL使用https://login.microsoftonline.com/{guid}/v2.0
端点抓取其令牌,而WebAPI正在使用https://login.microsoftonline.com/tfp/{guid}/{policy}/v2.0/
发行者。
根据docs,这不是一个openid兼容端点,但适用于B2C。请检查两个不同的索赔集!