You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 IS 5.10.0传参跳过登录页认证后SMS OTP页面返回401错误

问题根因

WSO2 IS 5.10.0 版本直接在/oauth2/authorize接口URL携带账号密码触发认证时,存在两个明确问题会导致后续SMS OTP环节返回401:

  • 基础认证器默认不会为URL传参的认证请求持久化完整会话上下文:手动在默认登录页提交账号密码时,框架会在认证成功后向当前会话写入跨认证端点的合法鉴权标记、同步认证上下文到后续认证步骤;直接URL传参走认证时,默认逻辑仅完成账号密码校验,不会向后续SMS OTP端点传递合法会话凭证,SMS OTP端点校验会话合法性失败就会返回401。
  • URL传参触发链路时存在参数重复拼接bug:你贴出的SMS OTP跳转URL中sp=User Portal、isSaaSApp=false两个参数各重复出现两次,会导致端点参数解析时取到异常值,触发鉴权拦截。
可落地修复方案

快速验证方案(无需改配置/源码)

不要用GET请求在authorize接口明文传账号密码,改用标准POST提交方式走认证流程:

  1. 先发起不带username、password参数的普通/oauth2/authorize请求,从响应中提取返回的sessionDataKey参数,同时保存响应头Set-Cookie里的commonAuthId会话值
  2. 构造POST请求到/commonauth端点,请求体携带以下参数,同时带上一步拿到的commonAuthId cookie:
    sessionDataKey=<第一步提取的会话key值>
    username=test
    password=test@123
    authenticator=BasicAuthenticator
    type=oidc
    
  3. 基础认证完成后得到302跳转响应时,完整携带该响应返回的所有Cookie值访问跳转后的SMS OTP地址,即可正常加载验证页面。

永久修复方案(修改配置一劳永逸)

  1. 打开WSO2 IS部署目录下的配置文件:<IS_HOME>/repository/conf/identity/application-authentication.xml
  2. 找到BasicAuthenticator的配置节点,新增两个参数开启URL传参的上下文持久化能力:
    <Authenticator name="BasicAuthenticator" enabled="true">
        <!-- 原有配置保留 -->
        <Parameter name="ProcessUrlParams">true</Parameter>
        <Parameter name="PersistAuthContextOnUrlAuth">true</Parameter>
    </Authenticator>
    
  3. 保存配置后重启WSO2 IS服务,原有带username、password参数的authorize请求即可正常走完Basic Auth+SMS OTP的全链路,不会再出现401错误。

兜底排查点

如果上述操作完成后仍报401,检查SMS OTP端点的访问校验逻辑:打开<IS_HOME>/repository/deployment/server/webapps/oauth2/smsotpauthenticationendpoint/smsotp.jsp,确认文件头部的会话校验逻辑没有拦截框架内部的302跳转请求,把Cookie非空校验的拦截规则放宽,允许认证链路的内部跳转请求访问即可。

内容的提问来源于stack exchange,提问作者rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:33:34