Spartacus ASM启动客户会话时出现403 ForbiddenError报错
403 Forbidden 报错原因及排查解决方案
核心原因
该报错属于SAP Commerce OCC接口的权限校验不通过导致,你搜索客户时调用的是ASM专属的客户查询接口,默认已给asagentgroup角色开放了权限;而启动客户会话时调用的/users/{userid} GET接口是通用用户详情接口,默认仅允许用户本人、管理员角色访问,asagent账号默认不在允许访问的角色范围内,因此触发403。
其他可能触发原因
- 启动客户会话时没有正确生成/携带ASM代理身份的OAuth2令牌,或者令牌中缺少模拟目标用户的权限标识
- 请求参数中的
curr=abc对应的货币没有在当前{basesiteid}站点的可用货币配置中,部分版本的SAP Commerce会将非法参数的校验失败也返回403状态码 - 目标
{userid}不属于当前站点的用户池,跨站点用户访问被权限规则拦截
排查步骤
- 首先校验请求头是否携带了正确的
Authorization: Bearer {令牌}参数,解码JWT令牌查看是否包含asagentgroup角色标识,以及是否携带了模拟目标用户的关联字段 - 检查Commerce后台
occsecurity配置,查看/users/{userid}GET接口的安全限制规则,确认是否允许asagentgroup角色访问 - 核对
{basesiteid}对应的站点配置,检查curr=abc是否在站点的可用货币列表、lang=en是否在可用语言列表中 - 验证目标
{userid}是否属于当前{basesiteid}站点下的注册用户,排除跨站点访问的情况
解决方案
- 调整OCC接口安全配置,给
asagentgroup开放/users/{userid}GET接口的访问权限,配置参考:occ.security.permissions.users.get=hasRole('ROLE_CUSTOMERGROUP') or hasRole('ROLE_ASAGENTGROUP') - 修正ASM会话启动流程,确保先调用ASM专属的会话初始化接口,拿到携带模拟用户权限的有效令牌后,再发起用户详情查询
- 若
abc为非法货币编码,替换为当前站点支持的货币编码,或者在站点配置中添加对应货币的支持 - 若业务需要跨站点代理用户,调整跨站点用户访问的权限规则,放开对应限制
内容的提问来源于stack exchange,提问作者kritika narang
相关产品推荐
相关产品推荐

