我有ADB2C内置策略。由此,我对最终用户进行身份验证,并生成JWT令牌,以通过使用OpenId Connect配置的APIM来调用API。由于使用了入门工具包,我现在正在设置自定义策略(IEF),但似乎无法并行正常工作。
使用内置策略,一切正常。但是,当我尝试使用通过IEF生成的令牌时,即使所有声明都相同,我也总是收到错误401“该请求的授权已被拒绝。”
快速浏览生成的令牌后,我发现对令牌进行签名的密钥与内置的生成令牌不同。
当然是错误的出处。实际上,在设置自定义策略时,我们需要创建“策略密钥”以对令牌进行签名和加密。并且默认情况下,它是生成的,因此与内置的有所不同。但是我不知道该如何解决!
请注意,对于内置策略和自定义策略,我确实需要具有相同的签名和加密密钥,因为在APIM中,我只能为OpenId Connect配置使用1个元数据URI,而在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:服务遇到内部错误。请重新认证,然后重试。