azure - Azure API 管理无法使用 azure b2c 进行授权:签名失败
问题描述
我已经在 b2c 中配置了后端应用程序 (api) 和 azure apim devportal(客户端应用程序)。我提供了从客户端应用程序访问后端 api 的权限。我已使用它在 azure api 管理中配置 oauth 身份验证。
我正在使用授权代码流。对于令牌验证,我使用了入站策略:
<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 开发人员门户网站时,我在使用收到的令牌时遇到以下错误:。
JWT 验证失败:IDX10501:签名验证失败。无法匹配键
我已将后端 api 应用程序 ID 配置为资源,并将 user_impersonation 配置为默认范围。解码令牌我可以看到与 aud 相同的后端 appid。我也尝试使用 appid uri 作为资源,但看到同样的错误。
任何帮助表示赞赏。
解决方案
有几种情况可能导致此错误。你检查了下面的线程
Azure AD B2C 错误 - IDX10501:签名验证失败
https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect-aspnetcore/issues/18
如果以上没有帮助:我假设您正在使用自定义策略。创建签名密钥和加密时,您必须遵循https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-get-started-custom中描述的步骤。
如果您在创建 TokenSigning 和 TokenEncryption 密钥时跳过或修改密钥类型/密钥用法,则有可能遇到该问题。
下面是我在将 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 作为 Authorize header bearer token 并进行测试。
高温高压
推荐阅读
- cloud9-ide - Cloud9 中是否有 Eclipse 中的导入类快捷方式/功能?
- android - 在 Android Studio 的子项目实体中出现问题反应原生
- tfs - 由于身份无效的用户的搁置集,无法使用 TF 销毁命令
- mysql - 如何将数据从 Spark RDD 放入 Mysql 表
- python - 如何简化 SymPy 中的矩阵表达式?
- asp.net-identity - 无法使用 Identity Server 保护 webapi
- .htaccess - 显示不同的 url 并加载不同的页面 htaccess
- c - C - 为什么#pragma pack(1) 将 6 位结构成员视为 8 位?
- java - 如何在 android App 中实现基于 Token 的 Rest API
- git - 如何使用 JIRA 映射 sourcetree 提交