Пользовательское сообщение об ошибке WSO2 Identity Server - PullRequest
0 голосов
/ 27 мая 2020

Мы используем WSO2 Identity Server 5.8.0.

Мы сделали расширение для org.wso2.carbon.identity.application.authenticator.samlsso.manager.DefaultSAML2SSOManager, расположенного в проекте identity-outbound-auth-samlsso

В основном нам нужно добавить несколько проверок в Ответ SAML при использовании внешних IdP на основе аутентификации SAML.

Мы выполнили все проверки, и все работает нормально. Мы столкнулись с одной маленькой проблемой. В некоторых случаях, когда возникают некоторые ошибки доступа, нам необходимо настроить сообщение об ошибке для пользователя. Я видел здесь Я видел, что можно настроить сообщение об ошибке, и можно настроить WSO2 IS, чтобы передать код ошибки в параметре запроса. Итак, что я хотел сделать, так это сгенерировать собственный код ошибки при возникновении одной ошибки. Я попробовал предыдущую конфигурацию, а затем в классе org.wso2.carbon.identity.application.authenticator.samlsso.SAMLSSOAuthenticator сделал следующее:

@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 будет отображаться в параметре запроса, но это не так. Так что мне пришлось искать обходной путь; Мое решение заключалось в том, чтобы добавить к ответу повар ie, но он мне не нравится.

Есть ли шанс распространить собственный код ошибки из SAMLSSOAuthenticator на страницу ошибки входа JSP в параметр строки запроса?

Я что-нибудь упустил?

Спасибо

Анджело

1 Ответ

0 голосов
/ 28 мая 2020
         context.setProperty("AuthErrorCode", "666");
         context.setProperty("AuthErrorMessage", "extended class error message");

Установите выше в блоке catch метода processAuthenticationResponse. Параметры будут переданы в параметры URL-адреса страницы повтора.

EDIT, чтобы учесть новые детали комментария.

Поток выглядит как «SAML -> SAML». Но предложенное выше улучшение было введено только в потоках Oauth -> SAML / Oauth. Первоначально это было введено в 5.3.0. Но я только что проверил 5.8.0, и он там.

Архитектура такая.

Inbound Authenticator -> Framework -> Outbound Authenticator

В исходном улучшении WSO2 исправил компонент фреймворка и входящие компоненты Oauth. Так что любой может установить эти свойства в контексте фреймворка. И они будут переданы на входящую сторону. И если входящим является Oauth, это будет работать по умолчанию, поскольку аутентификатор входящего Oauth также рассматривается для того же улучшения. как читать заданные свойства из объекта контекста фреймворка.

Если вы хотите добиться этого, вам также необходимо написать собственный 'Inbound SAML Authenticator'. (На данный момент вы написали исходящий аутентификатор SAML. Он нам также понадобится для заполнения сообщения об ошибке.)

Расширьте существующий входящий аутентификатор SAML и напишите новый аутентификатор для чтения и установите сообщение об ошибке.

Улучшение

...