我们使用 xs 安全库根据令牌类型(client_credentials/user_token)获取令牌。如果不使用 xs 安全库,我无法在 Cloud SDK 的安全功能中复制相同的内容。
背景:
- 我们希望根据令牌的类型使用服务凭证来完成令牌交换。
使用 xs 安全依赖项,我们使用以下代码使用客户端凭据获取技术令牌/用户令牌。
//For client token
public String getClientCredentialToken() {
JSONObject buslogUaaCred = envar.getBuslogCredentials().getJSONObject("uaa");
XSTokenRequest xsTokenRequest = null;
try {
xsTokenRequest = new XSTokenRequestImpl(buslogUaaCred.getString("url"));
} catch (URISyntaxException e) {
e.printStackTrace();
}
xsTokenRequest.setClientId(buslogUaaCred.getString("clientid"));
xsTokenRequest.setClientSecret(buslogUaaCred.getString("clientsecret"));
xsTokenRequest.setType(XSTokenRequest.TYPE_CLIENT_CREDENTIALS_TOKEN);
String token = SecurityContext.getUserInfo().requestToken(xsTokenRequest);
return token;
}
//For named user token
public String getNamedUserToken() {
JSONObject buslogUaaCred = envar.getBuslogCredentials().getJSONObject("uaa");
XSTokenRequest xsTokenRequest = null;
try {
xsTokenRequest = new XSTokenRequestImpl(buslogUaaCred.getString("url"));
} catch (URISyntaxException e) {
e.printStackTrace();
}
xsTokenRequest.setClientId(buslogUaaCred.getString("clientid"));
xsTokenRequest.setClientSecret(buslogUaaCred.getString("clientsecret"));
xsTokenRequest.setType(XSTokenRequest.TYPE_USER_TOKEN);
String token = SecurityContext.getUserInfo().requestToken(xsTokenRequest);
return token;
}
我已使用以下依赖项来试用云 SDK 的安全性。
<dependency>
<groupId>com.sap.cloud.s4hana.cloudplatform</groupId>
<artifactId>security</artifactId>
<version>2.18.1</version>
</dependency>
<dependency>
<groupId>com.sap.cloud.s4hana.cloudplatform</groupId>
<artifactId>security-scp-cf</artifactId>
<version>2.18.1</version>
</dependency>
我找不到任何方法来复制与上述相同的方法。
我只能找到一种基于绑定到应用程序的 xsuaa 实例来获取令牌的方法,如下所述:
// Get XSUAA service token.
public String getClientToken() {
return AuthTokenAccessor.getXsuaaServiceToken().getJwt().toString();
}
Cloud SDK 是否支持此功能?