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

WSO2 IS 5.7.0与ADFS联邦时,SAML返回RequestDenied无错误页问题

针对你遇到的WSO2 Identity Server 5.7.0与ADFS联邦对接时未授权用户无错误页的问题,我整理了几个可行的解决方案,从WSO2端的自定义处理到ADFS端的配置调整都有覆盖:

一、WSO2 IS端:自定义错误处理,捕获SAML错误响应

问题根源是默认的SAMLSSOAuthenticator仅检查Assertion是否存在,未解析SAML Response中的错误状态码,导致直接抛出异常却无友好提示。你可以通过以下两种方式修复:

1. 扩展SAML认证器,处理错误状态码

创建一个自定义的SAMLSSO认证器,继承默认类并添加错误状态判断逻辑:

public class CustomSAMLSSOAuthenticator extends SAMLSSOAuthenticator {

    @Override
    protected void processAuthenticationResponse(HttpServletRequest request, 
                                                HttpServletResponse response, 
                                                AuthenticationContext context) throws AuthenticationFailedException {
        try {
            // 先解析SAML Response的状态信息
            SAML2Response saml2Response = getSAML2Response(request);
            Status status = saml2Response.getStatus();
            
            // 检查是否是权限拒绝的错误码
            if (status != null && StatusCode.REQUEST_DENIED.equals(status.getStatusCode().getValue())) {
                throw new AuthenticationFailedException("您没有权限访问该应用", "UNAUTHORIZED_ACCESS");
            }
            
            // 调用父类处理正常响应
            super.processAuthenticationResponse(request, response, context);
        } catch (SAMLSSOException e) {
            throw new AuthenticationFailedException(e.getMessage(), e);
        }
    }
}
  • 将编译后的jar包放入<IS_HOME>/repository/components/dropins目录
  • 在WSO2管理控制台的Identity Provider配置中,替换默认的SAMLSSO Authenticator为你自定义的版本

2. 配置全局错误页面,捕获认证失败异常

  1. 在<IS_HOME>/repository/deployment/server/webapps/authenticationendpoint/目录下创建自定义错误页,比如unauthorized-access.jsp,添加友好的权限提示内容。
  2. 修改<IS_HOME>/repository/conf/identity/application-authentication.xml,找到<AuthenticationEndpointConfig>节点,添加错误页映射:
<AuthenticationEndpointConfig>
    ...
    <ErrorPages>
        <ErrorPage code="UNAUTHORIZED_ACCESS" page="/authenticationendpoint/unauthorized-access.jsp"/>
    </ErrorPages>
</AuthenticationEndpointConfig>
  1. 重启WSO2 IS,当捕获到对应异常时会自动跳转到该页面。

二、ADFS端:配置自定义错误页(替代方案)

虽然SAML规范要求SP负责错误展示,但你可以在ADFS端配置,让未授权用户直接看到ADFS的错误页:

  1. 使用PowerShell设置Relying Party Trust的错误跳转URL:
Set-AdfsRelyingPartyTrust -TargetName "WSO2 IS RP" -ErrorUrl "https://login.ipleiria.pt/adfs/ls/error/access-denied.html"
  1. 在ADFS服务器的C:\inetpub\adfs\ls\error目录下创建access-denied.html,自定义权限拒绝的提示内容。
  2. 调整ADFS的Issuance Authorization Rule,确保未授权用户的请求被ADFS拦截并触发错误跳转。

三、额外注意事项

  • 对于WSO2 IS 5.7.0,修改配置后务必重启服务确保生效
  • 自定义代码时要注意兼容该版本的WSO2 API,避免出现兼容性问题
  • 错误页的样式尽量和你的应用保持一致,提升用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:36:42