我有 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:服务遇到内部错误。请重新验证并重试。