Безопасность шва с внешней аутентификацией - PullRequest
2 голосов
/ 01 июля 2010

Я использую Seam 2.2.1.CR1 на Weblogic 10.3.2 (11g).Я хочу использовать внешний SSO (проприетарный, предоставляемый Oracle на основе OID).Я хотел бы интегрировать этот внешний вход в систему (экран входа в систему принадлежит SSO).Обратите внимание, что я не хочу использовать LdapStore.Если бы я понял это правильно, это потребовало бы, чтобы у меня была страница входа через мое приложение, которое затем каким-то образом подключалось бы к LDAP и входило в систему.Я хочу использовать внешний экран входа в систему, предоставляемый SSO.

НЕКОТОРЫЕ МЫСЛИ

Я не вижу процедуры использования этого единого входа для входа в систему, которая будет отличатьсячем использовать любой аутентификатор WebLogic.Как при использовании единого входа, так и при проверке подлинности BASIC на Authenticator по умолчанию результат для приложения один и тот же: пользователь входит в приложение, и при каждом запросе HttpServletRequest метод getRemoteUser () возвращает имя пользователя, под которым пользователь вошел в систему (либо наSSO или логин BASIS), и .isUserInRole ('blah') возвращает true / false в зависимости от ролей, назначенных посредством аутентификации.Итак, я вижу, что две аутентификации абсолютно одинаковы в программировании.

ВОПРОС

Мой вопрос касается того, как это можно интегрировать с Seam Security.Seam in Action объясняет, как в приложение можно включить пользовательский экран входа в систему, который заполняет компонент Identity и компоненты Credentials.Затем Seam использует эти компоненты для применения ограничений безопасности высокого уровня, таких как s: hasRole.

Однако в моем приложении я НЕ хочу экран входа в систему.Все, что я хочу, это иметь возможность каким-то образом использовать Seam Security с тем, что у меня уже есть: роли и имя пользователя в HttpServletRequest.

Я нашел эту тему (см. В конце), но я не уверенЯ вполне понимаю.Например, вопрос в том, нужно ли мне расширять Идентификацию.

Другой вопрос заключается в том, что в «Шове в действии» Дэн Аллен говорит, что наличие страницы входа обязательно, чего я не хочу.Со страницы 449:

Только Seam не узнает, куда направлять неаутентифицированного пользователя, когда запрашивается эта страница, поскольку вы не указали страницу входа.Если страница входа не была установлена, Seam генерирует NotLoggedInException.

Как правило, я думаю, что интеграция внешнего SSO (или любого средства проверки подлинности сервера приложений) с Seam все еще плохо документирована, хотя этоочень распространенное деловое требование.Я думаю, мы все будем держаться до тех пор, пока парни не закончат с 3-м швом.

Между тем, какие-нибудь общие / конкретные указания?

Приветствия!

- http://seamframework.org/Community/HelpWithIdentityloginAndAcceptExternallyAuthenticatedPrincipal

1 Ответ

1 голос
/ 01 февраля 2011

Работает с Seam 2.x.

Создать поддельную страницу просмотра логина в pages.xml. Затем используйте его с или аналогичным способом для внешнего входа в систему.

Затем добавьте правило навигации для перенаправления на страницы успешного / неудачного входа в систему в этом представлении навигации.

И вам нужно будет переопределить метод аутентификации.

Примерно так:

<page view-id="/fakeLogin.xhtml">
        <action execute="#{identity.login}" if="#{not identity.loggedIn}" />
        <param name="username" />
        <navigation from-action="#{identity.login}">
                <rule if="#{identity.loggedIn}">
                        <redirect view-id="/home.xhtml"/>
                </rule>
                <rule if="#{not identity.loggedIn}">
                        <redirect view-id="/error.xhtml"/>
                </rule>
        </navigation>
</page>

И

@In(required = true)
private String username;

@In
Identity identity;

public boolean authenticate() {
   //...
   throw new AuthorizationException("login failed");
   //...
   return true;
}
...