Wildfly / Elytron - доступ к атрибутам идентичности из ejb

Я перевожу старый унаследованный сервис на EAP 7.1. В настоящее время он аутентифицирует и авторизует пользователей через LDAP, и я хотел бы переместить его туда, где он находится - домен безопасности в AS.

У меня есть рабочий домен безопасности, подкрепленный областью LDAP, вот так:

/subsystem=elytron/ldap-realm=***censored***:query
{
  "outcome" => "success",
  "result" => {
    "allow-blank-password" => false,
    "dir-context" => "***censored***",
    "direct-verification" => true,
    "identity-mapping" => {
      "rdn-identifier" => "sAMAccountName",
      "use-recursive-search" => true,
      "search-base-dn" => "***censored***",
      "attribute-mapping" => [
        {
          "from" => "cn",
          "to" => "roles",
          "filter" => "(&(objectClass=group)(member={1}))",
          "filter-base-dn" => "***censored***"
        },
        {"from" => "company", "to" => "company"},
        {"from" => "givenName", "to" => "firstName"},
        {"from" => "sn", "to" => "lastName"},
        {"from" => "mail", "to" => "email"}
      ],
      "user-password-mapper" => {"from" => "userPassword"}
    }
  }
}

Авторизация выполняется для атрибута "роли" атрибута, выбранного из сопоставления атрибутов LDAP.

Теперь, когда это работает, я бы хотел получить еще несколько атрибутов из LDAP (company, firstName, lastName, email и, возможно, больше). Они уже подобраны вышеупомянутым конфигом, и Elytron обрабатывает их так, как я думаю:

 <TS> DEBUG [org.wildfly.security] (default task-6) [javax.naming.ldap.InitialLdapContext@5c7e4fb4] successfully created. Connection established to LDAP server.
 <TS> DEBUG [org.wildfly.security] (default task-6) Trying to create identity for principal [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6) Executing search [(sAMAccountName={0})] in context [*****] with arguments [*****]. Returning attributes are [MAIL, SN, GIVENNAME, COMPANY]. Binary attributes are [null].
 <TS> DEBUG [org.wildfly.security] (default task-6) Found entry [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6) Identity for principal [*****] found at [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6) Executing search [(&(objectClass=group)(member={1}))] in context [*****] with arguments [*****, *****]. Returning attributes are [null, CN]. Binary attributes are [null].
 <TS> DEBUG [org.wildfly.security] (default task-6) Found entry [*****].
 .
 . bunch of group memberships
 .
 <TS> DEBUG [org.wildfly.security] (default task-6) Found entry [*****].
 <TS> TRACE [org.wildfly.security] (default task-6) Identity iterating - pagination not supported - end of list
 <TS> DEBUG [org.wildfly.security] (default task-6) Obtaining authorization identity attributes for principal [*****]:
 <TS> DEBUG [org.wildfly.security] (default task-6) Identity [*****] attributes are:
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [lastName] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [firstName] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [roles] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [roles] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [roles] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [roles] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [roles] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [roles] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [roles] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [company] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6)     Attribute [email] value [*****].
 <TS> DEBUG [org.wildfly.security] (default task-6) Context [javax.naming.ldap.InitialLdapContext@5c7e4fb4] was closed. Connection closed or just returned to the pool.

Я хотел бы получить эти атрибуты идентификации из кода в защищенном EJB-компоненте. Конечно, возможно внедрить dir-контекст и поиск атрибутов в самом коде, но это будет зависеть от конкретного развертывания. Я бы очень хотел, чтобы AS выставлял эти атрибуты через SessionContext или эквивалент.

Я в недоумении, как это сделать. Большая часть материала Elytron, доступного в Интернете, является слишком любезной, которая просто копирует официальные примеры для кредита, в то время как те же самые примеры Hello World повторяются снова и снова.

Так. Подвести итоги. Не берите в голову это быть областью LDAP. Атрибуты, которые мне нужны, доступны в объекте Identity. Позже идентификация преобразуется в принципала без этих атрибутов, и, насколько я знаю, принципал - это то, к чему у меня есть доступ через контекст сеанса EJB.

Есть ли какой-нибудь способ, которым я могу завладеть Идентичностью или, по крайней мере, взглянуть на нее из EJB? Желательно в реализации, независимой от способа?

С наилучшими пожеланиями!

Магнус Друж

2 ответа

Чтобы получить текущий идентификатор безопасности из EJB, можно использовать следующий код:

SecurityDomain.getCurrent().getCurrentSecurityIdentity()

Более подробную информацию о SecurityDomain можно найти здесь:

http://wildfly-security.github.io/wildfly-elytron/master/org/wildfly/security/auth/server/SecurityDomain.html

Найдите декодер пользовательских ролей, чтобы получить атрибуты в Wildfly. Затем сохраните атрибуты где-нибудь, где вы можете забрать их со своим руководителем.

Другие вопросы по тегам