首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wildfly / Elytron -从ejb访问标识属性

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

Stack Overflow用户
提问于 2018-06-28 14:09:01
回答 2查看 1.2K关注 0票数 2

我正在将一个旧的遗留服务迁移到EAP 7.1,它目前通过LDAP对用户进行身份验证和授权,我想将它移到它所属的地方-- AS上的一个安全域。

我有一个由LDAP域支持的工作安全域,如下所示:

代码语言:javascript
复制
/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属性映射中提取的identity属性"roles“执行的。

现在,我想从LDAP获得更多的属性(公司、firstName、lastName、电子邮件等)。上面的配置已经收集到了这些信息,Elytron按照我所期望的方式来处理它们:

代码语言:javascript
复制
 <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材料都是me类的,它们只是复制cred的官方示例,同时也是一样的Hello示例,一次又一次地滚动。

所以。总结一下。没关系,这是一个LDAP领域。我需要的属性在Identity对象中是可用的。身份后来被转换成没有这些属性的主体,据我所知,主体是我通过EJB会话上下文可以访问的东西。

有什么方法可以从EJB获得标识,或者至少可以查看它吗?最好是以一种与实现无关的方式?

诚挚的问候!

/Magnus德鲁格

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-11 19:29:40

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

代码语言:javascript
复制
SecurityDomain.getCurrent().getCurrentSecurityIdentity()

有关SecurityDomain的更多详细信息可以在这里找到:

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

票数 4
EN

Stack Overflow用户

发布于 2021-02-15 11:56:11

寻找一个自定义角色解码器,以获取野生苍蝇的属性。然后将这些属性存储在某个地方,在那里您可以使用您的主体来获取它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51085017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档