saml - OAuth 令牌在 Spartacus 上被撤销
问题描述
我们编写了一个将 SAML 登录流程与 Hybris 和 Spartacus 集成的自定义方法,其顺序如下。
序列流:
- 由于没有身份验证会话,用户被重定向到 IDP (OKTA)
- 用户将登录 IDP 登录页面,然后请求与 SAML 断言一起被重定向到 Hybris
- 在 Hybris 端,Hybris 将验证这些断言,并将生成“登录令牌”(身份验证代码)并将重定向到 Spartacus
- 在 Spartacus 端,它将识别是否存在“LoginToken”,如果存在,spartacus 将将此 LoginToken 发送给 Hybris,Hybris 将返回 access_token,然后将其设置在浏览器的 localStorage 中。
我们编写了一个客户控制器,它将LoginToken作为参数,并在响应中返回 access_token。我们在 Spartacus 中使用了以下代码来实现这一点,并在浏览器的 localStorage 中设置 access_token。但问题是 spartacus 在访问任何 Spartacus 页面时向 Hybris 发送令牌撤销请求,并且 access_token 正在被清空。
**
如果我们使用自定义控制器生成 OAuth,在 spartacus 中设置 access_token 的正确方法是什么?
或者我们应该采取不同的方法来生成和持久化 Spartacus 中的 access_token 吗?**
代码片段:
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 && !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 && LoginToken) { console.log("Redirect for SSO"); window.location.href="https://localhost:9002/samlsinglesignon/saml/sso/"; }
解决方案
现有的 SAP Customer Data Cloud 集成模块可实现此模式(1905 Cloud Extension Pack: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 令牌来访问 OCC API,并且需要从 SAP Commerce OAuth 功能发出。然而,在 CDC 案例中,登录是通过自动生成的所有在浏览器级别工作的屏幕设置。概括地说:CDC 登录过程位于浏览器中的屏幕设置 + CDC 服务器之间,Spartacus 中的包装器组件获取输出(如果您愿意,将其称为登录令牌)并将其传递到 OAuth 令牌请求中。然后,在 CDC 集成中实现的 CustomTokenGranter 将在后端验证该令牌,以便 OAuth 可以将有效的身份验证令牌发回给 Spartacus。然后,Spartacus 在任何 OCC API 调用中使用该令牌,就像它处理标准身份验证令牌一样。
这里有一些与 Okta 的流程类似的地方,您可以做类似的事情(就流程而言)。在这些情况下,您确实应该将后端集成到您的 IdP ......以在服务器端验证令牌并防止欺骗。
与 Spartacus 项目的其余部分一样,此集成的 Spartacus 方面是开源的。你可以在这里找到代码:https ://github.com/SAP/spartacus/tree/develop/integration-libs/cdc
推荐阅读
- mysql - 忘记使用 PHP 和 ORACLE DB 设置密码
- python - 使用 Python 读取包含空单元格的 Excel 电子表格的内容。我需要以编程方式忽略空单元格
- python - 如何在导入的方法(python)中使用 exec() 创建新变量
- python - python打印格式,从变量中读取缩进值
- amazon-web-services - 使用 accumulo 进行大规模摄取
- intellij-idea - 有没有办法将 1 添加到包含 intellij 中查找和替换数字的字符串中?
- java - Kotlin 到 Java 的迁移
- unity3d - 如何更快地更新精灵位置?
- pytorch - PyTorch 中的“注册”是什么意思?
- angular - Karma 结果页面上出现的单元测试上的 Angular 页面输出