我们使用 SAP Web-IDE Full Stack 开发了一个 Web 应用程序;我们需要检索登录到应用程序的用户的详细信息(如 SAP Cloud Platform Identity Authentication Administration 中所定义),例如显示名称和分配的组。我们尝试了 userapi/currentUser API,但它似乎只适用于 NEO 环境,因此在 Web-IDE 中调试时工作正常,但在 Cloud Foundry 上部署应用程序时出现 404 错误。我们是否需要添加一个新的目的地以使 userapi 也可以在 CF 上工作?或者 Cloud Foundry 上是否有某种类似的解决方案?
2 回答
在 SAP Cloud Foundry 中,如果您使用 XSUAA 服务开发 MTA 来管理用户身份验证和管理,例如在mta.yaml中定义,
...
resources:
- name: uaa_myapp
parameters:
path: ./xs-security.json
service-plan: application
service: xsuaa
type: org.cloudfoundry.managed-service
...
您可以使用 XSUAA 服务自身发布的 UAA API来管理用户身份验证和授权(例如:检索用户信息、分配的组、密码管理等)。在应用程序与另一个 IDP 联合的情况下也是如此。
例如,要使用此 API 来检索用户信息,您需要:
- 确定绑定到您的应用程序的 XSUAA 端点(SCP Cockpit > XSUAA 服务详细信息 > 取值url)
- 创建一个类型为 OAuth2TokenExchange 的目标 (xsuaa_api_destination)绑定到您的应用程序,并使用之前获取的 url url,并使用 XSUAA 服务详细信息中包含的数据填充 OAuth2 身份验证参数(步骤 1)。
- 从您的应用程序执行调用xsuaa_api_destination/userinfo,例如,如果您使用 JS,则使用 ajax。
您可以在 Cloud Foundry Environment SAP doc 的 Account and Authentication Service 中找到其他信息。
我强烈建议将SAP S/4HANA Cloud SDK用于此类任务。它是一个 SDK,通过为所有 Cloud Platform 机制提供易于使用的机制,使构建 SAP Cloud Platform 应用程序变得容易。
关于您手头的任务UserAccessor
,您可以像这样使用一个类:
final Optional<User> user = UserAccessor.getCurrentUser();
这适用于 Neo 和 Cloud Foundry,即两个平台都有一个界面,允许您以与平台无关的方式开发应用程序。
如果这听起来可以解决您的问题,我建议您查看此博客文章系列以开始使用。
或者,您也可以简单地将以下依赖项添加到您的项目中以开始测试 SDK:
<dependency>
<groupId>com.sap.cloud.s4hana.cloudplatform</groupId>
<artifactId>scp-neo</artifactId>
<version>2.7.0</version>
</dependency>
对于 Cloud Foundry,请使用scp-cf
而不是scp-neo
.
希望这可以帮助!
PS:为了在技术层面上回答您的问题,Cloud Foundry 使用所谓的 JWT 进行身份验证和授权。Authorization
您可以通过查看请求的标头来检查是否存在 JWT 。JWT 应该包含您要查找的信息。