SaaS 中新子帐户的 JWT 令牌无效

问题描述

我们正在 SAP BTP 上进行 SaaS 应用程序开发,在通过 SaaS 注册服务发布我们的应用程序并实现所有回调(包括依赖项回调)之后,当我们创建新租户时,遇到了非常奇怪的问题,有新的子帐户在下面的登录步骤中,子帐户和订阅面临问题---

  • 订阅工作正常并且能够生成租户特定的网址。
  • 当用户登录到应用程序无法通过登录用户调用任何后端服务 API 时,由于 XSUAA 无法进行身份验证,因为 JWT 签名无效 -

"无法验证访问签名 令牌 invalid_token"

  • 相同的工作流程适用于前段时间为测试目的创建的旧子帐户。
  • 为租户新创建的子账户面临问题。

请帮忙。

谢谢, 悉达多

解决方法

SAP业务技术平台在2020年上半年改变了Tenant的JWT验证方式。Instehttps://sap.github.io/cloud-sdk/docs/java/release-notes-sap-cloud-sdk -for-java#3161ad 使用众所周知且只有一个 URL 来获取验证密钥,它现在依靠 jku 字段和 issuer 来确保每个租户都有一个 URL 来获取密钥用于 JWT 验证。

SAP Cloud SDK 版本 3.16.1 及更高版本应完全支持此验证机制。这意味着您使用的 SDK 版本应该完全没问题。

可能存在应用程序逻辑可能需要更新的边缘情况。这就是为什么我建议您创建问题 here 并提供以下信息:

  1. 这个问题是从什么时候开始影响到你的?是不是一周前还能用,刚才坏了?或者您已经有一段时间没有添加新租户了,现在它坏了?
  2. 你应用的依赖树
  3. 请提供详细的异常堆栈跟踪或日志以确定根本原因。
  4. 将您认为失败的代码片段发送给我们。

当我们可以让它重现时,解决这个问题应该是相当简单的。 我们很高兴在找到解决方案后更新此线程,以便社区受益。

期待详细的 issue 和复制步骤。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...