Как получить роли с аутентификацией JSR 196 в GlassFish? - PullRequest
2 голосов
/ 01 февраля 2010

Я хочу использовать пользовательский модуль аутентификации, соответствующий JSR 196 в GlassFish 3. Интерфейс javax.security.auth.message.ServerAuth имеет метод:

AuthStatus validateRequest(
  MessageInfo messageInfo,
  javax.security.auth.Subject clientSubject,
  javax.security.auth.Subject serviceSubject
)

AuthStatus может быть одной из нескольких констант, таких как FAILURE или SUCCESS.

Вопрос: Как я могу получить роли из "базы данных ролей" с JSR 196?

Пример. Сервер получает запрос с токеном SSO (например, токен CAS), проверяет, является ли токен действительным, заполняет объект удаленного пользователя ролями, извлекаемыми из базы данных через JDBC или из службы REST через http.

Является ли выборка роли в области действия JSR 196? Как это можно реализовать?

Нужно ли использовать JSR 196 вместе с JSR 115 , чтобы использовать пользовательскую аутентификацию и источник пользовательской роли?

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Это пример кода из моей реализации JSR-196OpenID. Метод устанавливает роли, хранящиеся в String Array для текущего CallerPrincipal:

private boolean setCallerPrincipal(String caller, Subject clientSubject) {
            boolean rvalue = true;
            boolean assignGroups = true;
            // create CallerPrincipalCallback
            CallerPrincipalCallback cPCB = new CallerPrincipalCallback(
                            clientSubject, caller);
            if (cPCB.getName() == null && cPCB.getPrincipal() == null) {
                    assignGroups = false;
            }
            try {
                    handler.handle((assignGroups ? new Callback[] {
                                    cPCB,
                                    new GroupPrincipalCallback(cPCB.getSubject(),
                                                    assignedGroups) } : new Callback[] { cPCB }));
                    logInfo(DEBUG_JMAC, "jmac.caller_principal:" + cPCB.getName() + " "
                                    + cPCB.getPrincipal());
            } catch (Exception e) {
                    // should not happen
                    logger.log(Level.WARNING, "jmac.failed_to_set_caller", e);
                    rvalue = false;
            }
            return rvalue;
    }

Я вызываю этот метод во время метода validateRequest (). Вы можете увидеть полный код здесь: http://code.google.com/p/openid4java-jsr196/source/browse/trunk/src/main/java/org/imixs/openid/openid4java/OpenID4JavaAuthModule.java

Также эта страница будет полезна: http://code.google.com/p/openid4java-jsr196/

0 голосов
/ 17 марта 2010

Вот как я сопоставляю пользователей с ролями:

У меня есть 3 роли в моем web.xml, а также в моем sun-web.xml 3 сопоставления ролей и групп, которые отображают эти роли в нескольких группах. Затем у меня есть база данных с таблицей Users, в которой есть столбец под названием «группа». Эта группа соответствует группе, которая сопоставлена ​​с ролью. Я также использую пользовательский модуль аутентификации на основе JSR 196 с OpenID. Таким образом, в основном, когда пользователь входит в свою группу, его читают из БД, а затем мое приложение назначает ему соответствующую роль. Все это делается с использованием стандартной декларативной модели безопасности J2EE.

Для моего пользовательского модуля авторизации я использую библиотеку под названием AuthenticRoast , которая немного упрощает работу.

Вот также похожий пост ...

Надеюсь, это поможет.

...