3

我们使用 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 上是否有某种类似的解决方案?

4

2 回答 2

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 来检索用户信息,您需要:

  1. 确定绑定到您的应用程序的 XSUAA 端点(SCP Cockpit > XSUAA 服务详细信息 > 取值url
  2. 创建一个类型为 OAuth2TokenExchange 的目标 (xsuaa_api_destination)绑定到您的应用程序,并使用之前获取的 url url,并使用 XSUAA 服务详细信息中包含的数据填充 OAuth2 身份验证参数(步骤 1)。
  3. 从您的应用程序执行调用xsuaa_api_destination/userinfo,例如,如果您使用 JS,则使用 ajax。

您可以在 Cloud Foundry Environment SAP doc 的 Account and Authentication Service 中找到其他信息。

于 2020-02-17T17:12:16.877 回答
1

我强烈建议将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 应该包含您要查找的信息。

于 2018-11-20T08:17:00.247 回答