WSO2单点登录(SSO)登出问题
这个问题我之前帮客户排查过,核心原因是WSO2 Identity Server对登出后的重定向URI有严格的白名单校验——你用来登出后跳转的http://server:8080没有被添加到服务提供商(SP)的已注册回调URI列表里,所以才会抛出POST logout URI does not match with registred callback URI错误。
下面是具体的配置步骤,跟着做就能解决:
1. 进入WSO2 IS管理控制台
登录到你的WSO2 IS管理后台(默认地址是https://<你的IS服务器地址>:9443/carbon),用管理员账号登录。
2. 找到并编辑你的Java服务提供商
在左侧导航栏依次点击 Main > Identity > Service Providers > List,找到你配置的Java SP,点击它旁边的Edit按钮进入配置页面。
3. 更新OAuth/OpenID Connect的回调URI列表
在SP配置页面,找到Inbound Authentication Configuration下的OAuth/OpenID Connect Configuration,点击对应的Edit按钮(就是你之前配置http://server:8080/openid/callback的地方)。
在Callback Urls输入框里,把你的登出重定向地址http://server:8080添加进去,和已有的回调URI用逗号分隔或者换行(WSO2 IS两种格式都支持)。比如:
http://server:8080/openid/callback http://server:8080
4. 保存配置
点击页面底部的Update按钮,保存你的修改。
5. 验证Java SP的登出参数
回到你的Java应用,确保登出请求中传递的post_logout_redirect_uri参数值就是http://server:8080,并且和WSO2里注册的完全一致——注意协议(http/https)、域名、端口、末尾是否有斜杠这些细节,WSO2 IS是严格匹配的,差一点都不行。
- 如果你的Java应用用了Spring Security、OpenID4Java这类框架,要检查框架的登出配置项,确保
post_logout_redirect_uri被正确设置,没有被框架自动修改。 - 测试前建议清空浏览器缓存和会话,避免旧的认证信息干扰测试结果。
这样配置完之后,登出操作应该就能正常跳转到SP的首页了。
内容的提问来源于stack exchange,提问作者John Marie

