Токен OAuth отзывается У Спартака

#saml #hybris #spartacus-storefront

Вопрос:

Мы написали индивидуальный подход к интеграции потока входа SAML с Hybris и Spartacus в следующей последовательности.

Поток последовательностей :

  1. Пользователь перенаправляется на IDP (OKTA), так как сеанс аутентификации отсутствует
  2. Пользователь войдет в систему на странице входа в систему IDP, а затем запрос будет перенаправлен на Hybris вместе с утверждениями SAML
  3. На конце Hybris Hybris проверит эти утверждения и сгенерирует «Токен входа» (Код аутентификации) и перенаправит на Spartacus
  4. На конце Spartacus он определит, существует ли «LoginToken», и если он существует, spartacus отправит этот логин в Hybris, а Hybris вернет access_token, который затем будет установлен в локальном хранилище браузера.

Мы написали контроллер клиента, который примет LoginToken в качестве параметра и вернет access_token в ответе. Мы использовали приведенный ниже код в Spartacus для реализации этого и установили access_token в локальном хранилище браузера. Но проблема в том, что spartacus отправляет запрос на отзыв токена Hybris при доступе к любой из страниц Spartacus, и ключ доступа очищается.

**

  1. Как правильно настроить access_token в spartacus, если мы используем пользовательский контроллер для создания OAuth ?
  2. Или есть другой подход, который мы должны использовать при создании и сохранении access_token в Spartacus ?**

    Фрагмент кода :

     ngOnInit() {
       var LoginToken = this.cookies.get('LoginToken');
       var authToken= JSON.parse(localStorage.getItem('spartacus⚿⚿auth')).token.access_token;
       var mainToken= JSON.parse(localStorage.getItem('spartacus⚿⚿auth'));
       console.log('token value ' authToken);
       if(!authToken amp;amp; !LoginToken) {
         console.log("Make call to Hybris for OAuth token");
         let fetchUrl ='https://localhost:9002/occ/v2/{baseSite}/ssoauthenticate/?client_id=mobile_android';
          this.http.post<any>(fetchUrl,"",{withCredentials:true,headers:{"Access-Control-Allow-Origin":"*"}}).subscribe(data => {
                console.log(data.value);
                mainToken.token.access_token=data.value;
                mainToken.token.granted_scopes=data.scope;
                mainToken.token.token_type=data.tokenType;
                mainToken.token.expires_at=1631632676508;
                mainToken.userId="current";
                localStorage.setItem('spartacus⚿⚿auth',JSON.stringify(mainToken));
    
    });
       }
       if(!authToken amp;amp; LoginToken) {
        console.log("Redirect for SSO");
        window.location.href="https://localhost:9002/samlsinglesignon/saml/sso/";
       }
     

Ответ №1:

Существует существующий модуль интеграции для SAP Customer Data Cloud, который реализует этот шаблон (пакет расширений SAP Cloud: https://help.sap.com/viewer/bad9b0b66bac476f8a4a5c4a08e4ab6b/v1905/en-US/4658aaba5ff242ab99f2f89aa1a51ec8.html, начиная с 2005 года, он входит в пакет расширений интеграции: https://help.sap.com/viewer/b6a1e8b75222421a8faf0269e8fbd0dc/2102/en-US/f9df5c14bfdf47349dc9b82de84a574f.html)

Однако в документах на самом деле не говорится: чтобы включить это, была изменена возможность OAuth для поддержки реализаций CustomTokenGranter. Интеграция SAP CDC затем основывается на этом, чтобы обеспечить логику, специфичную для CDC, в этой области.

Вам нужен токен OAuth для доступа к API OCC, и он должен быть выдан с помощью функций SAP Commerce OAuth. Однако в случае CDC вход осуществляется с помощью автоматически сгенерированных экранов, которые все работают на уровне браузера. В широком смысле: процесс входа в CDC происходит между экранами в браузере серверами CDC, компоненты-оболочки в Spartacus принимают вывод (назовите его токеном входа, если хотите) и передают его в запрос токена OAuth. CustomTokenGranter, реализованный в интеграции CDC, затем проверит этот токен на серверной части, чтобы OAuth мог выдать действительный токен аутентификации обратно в Spartacus. Затем Spartacus использует этот токен в любых вызовах OCC API точно так же, как он обрабатывает стандартный токен аутентификации.

Здесь есть аналогии с вашим процессом с Okta, и вы могли бы сделать что-то подобное (с точки зрения процесса). В этих сценариях вы действительно должны иметь внутреннюю интеграцию с вашим IdP … для проверки токенов на стороне сервера и предотвращения подмены.

Сторона этой интеграции Spartacus является открытым исходным кодом, как и в остальной части проекта Spartacus. Вы можете найти код здесь: https://github.com/SAP/spartacus/tree/develop/integration-libs/cdc