我已经在 b2c 中配置了后端应用程序 (api) 和 azure apim devportal(客户端应用程序)。我已经提供了从客户端应用程序访问后端 api 的权限。我有 使用它在 azure api 管理中配置 oauth 身份验证。
我正在使用授权代码流程。对于 token 验证,我使用了入站策略:
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized" require-expiration-time="true" require-scheme="Bearer" require-signed-tokens="true" clock-skew="0">
<openid-config url="https://<domain>/tenantid/v2.0/.well-known/openid-configuration?p=signinsignup_policy" />
<required-claims>
<claim name="aud">
<value><appid for backend app></value>
</claim>
</required-claims>
</validate-jwt>
在 apim 开发者门户尝试时 我在使用收到的 token 时遇到以下错误:。
JWT 验证失败:IDX10501:签名验证失败。无法匹配键
我已将后端 api 应用程序 ID 配置为资源,并将 user_impersonation 配置为默认范围。解码 token 我可以看到与 aud 相同的后端 appid。我也尝试使用 appid uri 作为资源,但看到相同的错误。
感谢任何帮助。
最佳答案
有几种情况可能会导致此错误。 您检查过以下线程吗
Azure AD B2C error - IDX10501: Signature validation failed
https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect-aspnetcore/issues/18
如果上述方法没有帮助:我假设您正在使用自定义策略。创建签名 key 和加密时,您必须遵循 https://learn.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-get-started-custom 中描述的步骤。 。
如果您在创建 TokenSigning 时跳过或修改 key 类型/ key 用法 & TokenEncryption key 有机会遇到该问题。
以下步骤是我在将 B2C 与 API 管理集成时尝试的。它正在按预期工作
- 创建了 Web API 和集成 B2C(已关注 https://azure.microsoft.com/en-in/resources/samples/active-directory-b2c-dotnet-webapp-and-webapi/ )
- 集成 Swagger
- 创建了 Azure API 管理服务
- 使用“OpenAPI”添加了 API
- 给定 OpenApi 规范 URL 为 https://xxx.azurewebsites.net/Swagger/docs/v1并创建了 API
- 创建 API 时选择映射到现有用户进行测试的有效产品
- 已导航至 APIM 开发者门户并进行测试
- 在测试时添加 access_token 作为授权 header 承载 token 并进行测试。
HTH
关于Azure API 管理无法使用 azure b2c 进行授权 : Signature Failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55984143/