引起401响应的B2C自定义策略访问令牌

时间:2019-08-11 16:15:57

标签: azure azure-active-directory azure-ad-b2c

我正在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响应吗?

1 个答案:

答案 0 :(得分:0)

之所以会发生这种情况,是因为为内置流发行的令牌使用的密钥与针对自定义策略发行的令牌的密钥不同。

(内置流的签名密钥由Microsoft管理。自定义策略的签名密钥为managed by you。)

确保您的后端API引用的是自定义策略的/.well-known/openid-configuration端点,而不是内置流程的端点。