[英]WSO2 Identity Server Custom error message
我们正在使用 WSO2 身份服务器 5.8.0。
我们对位于项目identity-outbound-auth-samlsso
的org.wso2.carbon.identity.application.authenticator.samlsso.manager.DefaultSAML2SSOManager
进行了扩展
基本上,当我们使用基于 SAML 身份验证的外部 IdP 时,我们需要向 SAML 响应添加一些检查。
我们进行了所有检查,一切正常。 我们正面临一个小问题。 在某些情况下,当发生一些访问错误时,我们需要自定义错误消息给用户。 我在这里看到我看到可以自定义错误消息,并且可以配置 WSO2 IS 以便在请求参数中传递错误代码。 所以,我想做的是在发生一个错误时生成自定义错误代码。 我尝试了之前的配置,然后在org.wso2.carbon.identity.application.authenticator.samlsso.SAMLSSOAuthenticator
class 我做了以下
@Override
protected void processAuthenticationResponse(HttpServletRequest request, HttpServletResponse response, AuthenticationContext context) throws AuthenticationFailedException {
try{
//Original code
} catch (SPIDCheckException spe) {
// whenever the code reaches here the subject identifier will be null. Therefore we can't pass AuthenticatedUser object with the exception.
AuthenticationFailedException afe = new AuthenticationFailedException(spe.getMessage(), spe);
afe.setErrorCode("MY_CUSTOM_ERROR_CODE");
throw afe;
}
}
我期待在以前的配置中,我的自定义 cose 会出现在请求参数中,但事实并非如此。 所以我必须找到一种解决方法; 我的解决方案是在响应中添加一个 cookie,但我不喜欢它。
是否有机会将自定义错误代码从SAMLSSOAuthenticator
传播到查询字符串参数中的登录错误 JSP 页面?
我错过了什么吗?
谢谢
安杰洛
context.setProperty("AuthErrorCode", "666");
context.setProperty("AuthErrorMessage", "extended class error message");
在上面的processAuthenticationResponse
方法的 catch 块中设置。 参数将传递给重试页面 URL 参数。
编辑以迎合评论的新细节。
流程为“SAML -> SAML”。 但上述建议的改进仅在“Oauth -> SAML/Oauth”流程中引入。 这最初是在 5.3.0 中引入的。 但是,我也刚刚检查了 5.8.0,它就在那里。
架构是这样的。
Inbound Authenticator -> Framework -> Outbound Authenticator
在原来的改进中,WSO2 修复了框架组件和入站 Oauth 组件。 这样任何人都可以将这些属性设置为框架上下文。 这些将被传播到入站端。 如果入站是 Oauth,则默认情况下这将起作用,因为 Oauth 入站验证器也正在通过相同的改进得到解决。
由于您的入站不是 Oauth,而是 SAML,因此您的默认 SAML 入站身份验证器不知道如何从框架的上下文 object 中读取设置的属性。
如果您想实现这一点,您还需要编写一个自定义的“入站 SAML 身份验证器”。 (到目前为止,您已经编写了一个出站 SAML 身份验证器。我们也需要它来填充错误消息。)
扩展现有的 SAML 入站身份验证器并编写一个新的身份验证器来读取和设置错误消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.