首页 > 解决方案 > 如何使用从内置策略和自定义策略生成的令牌?

问题描述

我有 ADB2C 内置策略有效。由此,我验证我的最终用户并生成 JWT 令牌以通​​过 APIM 调用 API,并使用 OpenId Connect 进行配置。我现在正在设置自定义策略 (IEF),这要归功于入门工具包,但它似乎无法同时正常工作。

使用内置策略,一切正常。但是当我尝试使用通过 IEF 生成的令牌时,即使所有声明都相同,我也总是收到错误 401“此请求的授权已被拒绝”。

快速查看生成的令牌后,我发现签署令牌的密钥与内置生成的令牌不同。

这肯定是错误的来源。事实上,在设置自定义策略时,我们需要创建“策略密钥”来签署和加密令牌。默认情况下,它是生成的,与内置的不同。但我不知道如何解决这个问题!

请注意,我确实需要为内置策略和自定义策略使用相同的签名和加密密钥,因为在 APIM 中,我只能使用 1 个元数据 URI 进行 OpenId Connect 配置,并在 API 操作验证策略的部分中使用 1 个配置 URL。

另请注意,我没有找到一种方法来检索刷新令牌的当前加密密钥(由内置策略使用)。问题是一样的...

谢谢你的帮助!

这是一个有效的令牌标头,包括签名密钥:

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}

目前,我的策略密钥生成的孩子是“6jQvK3Cr-pdfMP9ozewO3dnmizxxx_toYfjEnxVpJFs”

当我尝试通过查看元数据 URI https://mydomain/tenantId/discovery/v2.0/keys?p=a_ief_policy_name上传相同的密钥时,它已正确上传

{
  keys: [
  {
    kid: "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk",
    nbf: 1493763266,
    use: "sig",
    kty: "RSA",
    e: "AQAB",
    n: "tVKUtcx_n9rt[...]VTVSR0hiXudFlfQ2rOhPlpObmku68lXw-7V-P7jwrQRFfQVXw"
  }
  ]
}

但是在收到登录请求的响应时,我收到了错误:AADB2C90085:服务遇到内部错误。请重新验证并重试。

标签: azure-ad-b2cidentity-experience-framework

解决方案


推荐阅读