开发者社区> jerrywangsap> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SAP Spartacus 的会话管理 Session Management

简介: SAP Spartacus 的会话管理 Session Management
+关注继续查看

官网


从一开始,Spartacus 就包含了客户端身份验证和用户身份验证。 尽管这对于 Web 应用程序来说并不常见,但对于 Spartacus 来说是必须的,因为后者需要使用 OCC API。


客户端身份验证涉及代表已注销用户工作的 endpoint,例如注册、重置密码、以访客身份下订单和验证地址。这些 endpoint 需要随请求一起发送访问令牌,并且需要按照 OAuth 规范定义的客户端凭据流来检索此访问令牌。换句话说,某些 OCC 请求需要客户端凭据流 - Client Credentials Flow,因此您需要在 OAuth 客户端中启用此流。


注意:在 OAuth 客户端中启用客户端凭据流时,应始终将 ROLE_CLIENT 与 Spartacus OAuth 客户端一起使用。永远不要将 ROLE_TRUSTED_CLIENT 与 Spartacus 一起使用,因为它会显着危害应用程序的安全性。


同时,用户认证 - user authentication, 用于代表特定用户资源发送的请求。例如,如果您想更新您的个人资料,您需要登录。当您登录时,服务器会确认您的凭据 - credentials, 并向应用程序返回访问令牌。然后,此令牌将用于您帐户上的所有请求,例如更新您的个人资料、修改购物车和结帐。


在 Spartacus 3.0 之前,客户端身份验证和用户身份验证的代码都在 AuthModule 中,其中包括混合在一起的拦截器、服务和外观方法。在 Spartacus 3.0 中,AuthModule 仍然包含客户端和用户身份验证,但现在这是导入 UserAuthModule 和 ClientAuthModule 两个模块的结果。每个模块负责一种类型的身份验证。


此更改很重要,因为 Spartacus 默认构建为支持 OCC,但 Spartacus 不限于使用 OCC。 OCC API 需要为其接收的某些请求提供客户端凭据,但这对于其他 API 并不常见,因此,客户端和用户身份验证已分离,以便更轻松地与其他 API 一起使用。例如,如果您使用不需要客户端身份验证的其他 API,则可以只导入 UserAuthModule,而不是使用 AuthModule,并通过不包含 ClientAuthModule 来减小最终包的大小。


Authentication Flow

对用户进行身份验证是该模块的主要职责。 先前版本的 Spartacus 使用自定义代码来提供对资源所有者密码流的支持,但 OAuth 指定了可在 Web 应用程序中使用的其他流。 为了支持这些额外的流程,Spartacus 3.0 不再将其自定义代码用于资源所有者密码流程,而是依赖于为此目的构建的第三方 angular-oauth2-oidc 库,该库也经过了良好的测试和认证。


身份验证从 AuthService facade 开始,您可以在其中通过调用以下登录方法之一来初始化流程:


Resource Owner Password Flow 的 loginWithCredentials

loginWithRedirect 用于隐式流或授权代码流 - Implicit Flow or the Authorization Code Flow

然后 login 方法与 angular-oauth2-oidc 库交互。 但是,这种交互始终通过 OAuthLibWrapperService,这是一个用于将外部库与 Spartacus 代码隔离的层。


Storing Tokens and User Identifiers

身份验证后,从库方法收到的令牌需要存储在某个地方。 以前,这些代币保存在 NgRx Store 中,但在 Spartacus 3.0 中,有专门的服务来保存数据。 该库需要一个带有类似于 localStorage 或 sessionStorage 的 API 的存储机制,这是从 NgRx 切换到带有流的服务来保存数据的主要原因。


对于身份验证,通常仅存储令牌及其元数据(例如到期时间和范围)就足够了。 但是,对于 OCC,还需要在登录或注销后设置紧密耦合的用户 ID,以及在使用辅助服务模块 (ASM) 时进行用户模拟所需的用户 ID。 在 Spartacus 3.0 之前,用户 ID 与 NgRx 中的令牌保存在同一位置,并且由于之前的关联,用户 ID 仍保留在 UserAuthModule 中。 但是,令牌现在已与此模块中的用户标识符分开。 令牌及其元数据现在与 AuthStorageService 一起存储,而用户 ID 则拥有自己的专用 UserIdService。


Access Tokens in API Calls and Error Recovery

登录用户并存储他们的访问令牌和用户 ID 后,就可以请求用户的一些资源。为此,有必要在请求中将访问令牌作为标头传递。 在 Spartacus 中,这是通过 HTTP 拦截器实现的。


要使用访问令牌丰富请求,您无需以任何方式标记请求。 AuthInterceptor 根据 URL 识别对 API 的请求。如果请求没有 Authorization 标头,并且匹配 API 路径,则拦截器将标头添加到请求中。为了更容易扩展拦截器,Spartacus 有自己的 AuthHttpHeaderService 帮助服务。在大多数情况下,扩展这一项服务就足够了。


除了注入令牌之外,该拦截器还负责处理与授权相关的错误。在这种情况下,它首先尝试恢复并重试请求,如果不可能,它完成注销过程并将用户重定向到登录页面。当请求因访问令牌过期而失败时,拦截器使用刷新令牌(如果存在)请求新的访问令牌,然后使用新令牌重试失败的请求。


第二个 TokenRevocationInterceptor 拦截器具有非常特殊的作用。对于在用户注销时撤销令牌的调用,此拦截器添加了一个 Authorization 标头。使用不同的 OAuth 服务器,您可能不需要提供此标头,并且可以从您自己的 UserAuthModule 中删除此拦截器。


Persisting Authentication Data in the Browser Storage

登录后,您的令牌已被存储并用于 API 调用,您刷新页面,突然您不再登录。 为避免此问题,AuthStatePersistenceService 将身份验证数据(例如令牌和用户 ID)同步到 浏览器存储。


AuthStatePersistenceService 使用 StatePersistenceService 来与浏览器存储同步数据。 UserIdService 中的用户 ID、AuthStorageService 中的令牌和 AuthRedirectStorageService 中的重定向 URL 都同步到 localStorage。 每次数据发生变化时,都会保存在浏览器存储中,应用启动时从存储中读取到服务中。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SAP Spartacus 产品搜索页面结果里的 filter 设计明细
SAP Spartacus 产品搜索页面结果里的 filter 设计明细
0 0
SAP 电商云 Spartacus UI userID 即邮件地址中的加号问题
SAP 电商云 Spartacus UI userID 即邮件地址中的加号问题
0 0
SAP Spartacus 和 CDC 集成的 HTTP 请求明细
SAP Spartacus 和 CDC 集成的 HTTP 请求明细
0 0
SAP 电商云 Spartacus UI 的 Product Category Navigation UI 实现
SAP 电商云 Spartacus UI 的 Product Category Navigation UI 实现
0 0
SAP 电商云 Spartacus 服务器端渲染的单步调试详细步骤
SAP 电商云 Spartacus 服务器端渲染的单步调试详细步骤
0 0
SAP Spartacus 项目开发时需要注意的一些常见错误
SAP Spartacus 项目开发时需要注意的一些常见错误
0 0
测试 SAP 电商云 Spartacus UI 3.4.x 和 4.3.x 的 guest checkout 功能
测试 SAP 电商云 Spartacus UI 3.4.x 和 4.3.x 的 guest checkout 功能
0 0
将 SAP Spartacus 作为 feature module 进行 Lazy Load 延迟加载时遇到的注入错误分析
将 SAP Spartacus 作为 feature module 进行 Lazy Load 延迟加载时遇到的注入错误分析
0 0
如何在 SAP Spartacus 中编写 ASM-Compatible 的代码
如何在 SAP Spartacus 中编写 ASM-Compatible 的代码
0 0
SAP 电商云 Spartacus UI 里的 ASM 模块启用的前置条件
SAP 电商云 Spartacus UI 里的 ASM 模块启用的前置条件
0 0
+关注
文章
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
STARTING OUT IN WEB HOSTING
立即下载
WEB SERVICE EFFICIENCY AT INSTAGRAM
立即下载
低代码开发师(初级)实战教程
立即下载