我正在Azure B2C中创建自定义注册登录策略,并能够在Angular前端中使用Msal.js成功获取访问令牌。当我尝试使用B2C的授权向我的.Net Core后端发送请求(带有jwt访问令牌)时,我收到401响应。我有一个使用标准工作流程的注册策略,使用其访问令牌的请求也可以正常工作。我比较了令牌上的属性,看起来自定义策略令牌中缺少oid声明。 (所有其他声明似乎都是可选的。)这是令牌的比较:
自定义策略令牌已损坏:
{
aud: "..."
azp: "..."
exp: 1565534473
given_name: "..."
iat: 1565530873
iss: "https://login.microsoftonline.com/.../v2.0/"
name: "Aaron"
nbf: 1565530873
nonce: "001f61ed-61c7-4fac-b613-4a5a4e1c134e"
scp: "read"
sub: "..."
tid: "..."
ver: "1.0"
}
工作访问令牌
{
aud: "..."
azp: "..."
country: "United States"
emails: ["..."]
exp: 1565542145
given_name: "..."
iat: 1565538545
iss: "https://login.microsoftonline.com/.../v2.0/"
name: "..."
nbf: 1565538545
nonce: "ffd00fe6-dd02-4de1-ae06-8d6b6f0c8a81"
oid: "..."
scp: "read"
sub: "..."
tfp: "B2C_1_DefaultSignInSignUp"
ver: "1.0"
}
是否有该虚空声明?如果是这样,如何将其添加到自定义策略(TrustFrameworkBase.xml)中?还有其他方法可以解决此401响应吗?
答案 0 :(得分:0)
之所以会发生这种情况,是因为为内置流发行的令牌使用的密钥与针对自定义策略发行的令牌的密钥不同。
(内置流的签名密钥由Microsoft管理。自定义策略的签名密钥为managed by you。)
确保您的后端API引用的是自定义策略的/.well-known/openid-configuration
端点,而不是内置流程的端点。