Authentication Wildfly/Elytron-从ejb访问标识属性

Authentication Wildfly/Elytron-从ejb访问标识属性,authentication,jakarta-ee,wildfly,elytron,Authentication,Jakarta Ee,Wildfly,Elytron,我正在将一个旧的遗留服务迁移到EAP 7.1,它目前通过LDAP对用户进行身份验证和授权,我希望将此迁移到它所属的位置—AS上的一个安全域 我有一个由LDAP域支持的工作安全域,如下所示: /subsystem=elytron/ldap-realm=***censored***:query { "outcome" => "success", "result" => { "allow-blank-password" => false, "dir-conte

我正在将一个旧的遗留服务迁移到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中获取更多属性(公司、名字、姓氏、电子邮件,可能还有更多)。上面的配置已经收集到了这些,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.
DEBUG[org.wildfly.security](默认任务6)[javax.naming.ldap。InitialLdapContext@5c7e4fb4]已成功创建。已建立到LDAP服务器的连接。
调试[org.wildfly.security](默认任务6)尝试为主体[******]创建标识。
调试[org.wildfly.security](默认任务-6)使用参数[******]在上下文[*****]中执行搜索[(sAMAccountName={0}]。返回的属性为[MAIL、SN、GIVENNAME、COMPANY]。二进制属性为[null]。
调试[org.wildfly.security](默认任务6)找到条目[******]。
调试[org.wildfly.security](默认任务-6)在[******]找到主体[******]的标识。
调试[org.wildfly.security](默认任务-6)使用参数[****,****]在上下文[****]中执行搜索[(&(objectClass=group)(member={1}])。返回的属性为[null,CN]。二进制属性为[null]。
调试[org.wildfly.security](默认任务6)找到条目[******]。
.
. 一群团体成员
.
调试[org.wildfly.security](默认任务6)找到条目[******]。
跟踪[org.wildfly.security](默认任务-6)身份迭代-不支持分页-列表结束
调试[org.wildfly.security](默认任务6)获取主体[******]的授权标识属性:
调试[org.wildfly.security](默认任务6)标识[******]属性为:
调试[org.wildfly.security](默认任务-6)属性[lastName]值[*****]。
调试[org.wildfly.security](默认任务-6)属性[firstName]值[*****]。
调试[org.wildfly.security](默认任务-6)属性[角色]值[******]。
调试[org.wildfly.security](默认任务-6)属性[角色]值[******]。
调试[org.wildfly.security](默认任务-6)属性[角色]值[******]。
调试[org.wildfly.security](默认任务-6)属性[角色]值[******]。
调试[org.wildfly.security](默认任务-6)属性[角色]值[******]。
调试[org.wildfly.security](默认任务-6)属性[角色]值[******]。
调试[org.wildfly.security](默认任务-6)属性[角色]值[******]。
调试[org.wildfly.security](默认任务-6)属性[公司]值[******]。
调试[org.wildfly.security](默认任务-6)属性[email]值[*****]。
调试[org.wildfly.security](默认任务6)上下文[javax.naming.ldap。InitialLdapContext@5c7e4fb4]关门了。连接已关闭或刚返回池。
我想做的是从安全EJB中的代码中获取这些标识属性。当然可以注入dir上下文并从代码本身查找属性,但这是特定于部署的。我更愿意让AS通过
SessionContext
或等效文件公开这些属性

我不知道该怎么做。网络上提供的许多Elytron材料都是“我太好了”,它们只是复制了cred的官方示例,而只是重复了一遍又一遍的Hello World示例

所以。总而言之。不要介意这是一个LDAP领域。我需要的属性在Identity对象中可用。身份随后被转换成没有这些属性的主体,据我所知,主体是我可以通过EJB会话上下文访问的对象

是否有任何方法可以从EJB获得标识,或者至少是它的视图?最好是以实现不可知的方式

致以最良好的祝愿


/Magnus Drougge

要从EJB获取当前安全标识,可以使用以下代码:

SecurityDomain.getCurrent().getCurrentSecurityIdentity()
有关SecurityDomain的更多详细信息,请参见:


查找自定义角色解码器以获取Wildfly中的属性。
然后将属性存储到某个地方,在那里你可以与校长一起提取它们。

哇,这可能正是我要找的东西。谢谢,我试过之后会告诉你的。一年多之后,我们终于获得了资金,可以继续进行与这个问题相关的工作。我只是想说你的答案是正确的谢谢