Получение токена с помощью XSTokenRequest в Cloud SDK - PullRequest
4 голосов
/ 03 июля 2019

Мы использовали библиотеку безопасности xs для получения токена на основе типа токена (client_credentials / user_token). Мне не удалось воспроизвести то же самое в функции безопасности Cloud SDK без использования библиотеки безопасности xs.

Справочная информация:

  • Мы хотели, чтобы обмен токенами осуществлялся с использованием учетных данных службы в зависимости от типа токена.

Используя зависимость безопасности 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?

1 Ответ

1 голос
/ 03 июля 2019

SAP Cloud SDK прозрачно обрабатывает соответствующие потоки OAuth в XSUAA в зависимости от базового типа назначения (требует распространения пользователя или нет).

У нас есть соответствующие функциональные возможности в SDK, но они не доступны для общественности, поскольку мы хотим сохранить свободу изменять реализацию по мере необходимости.

Я немного задаюсь вопросом, действительно ли вам это нужно и вы хотите делать потоки самостоятельно. Вместо этого я предлагаю использовать VDM (клиентские библиотеки) SDK или классы DestinationAccessor, HttpClientAccessor или ScpCfService. Тем не менее, если у вас есть веская причина для самостоятельного выполнения потоков, используйте библиотеку безопасности XS, как вы уже это делаете.

Из любопытства, почему вы хотите делать потоки самостоятельно?

(Отказ от ответственности: я являюсь одним из авторов SAP Cloud SDK для Java).

...