【问题标题】:How to get LDAP user attributes with SPNEGO and CAS?如何使用 SPNEGO 和 CAS 获取 LDAP 用户属性?
【发布时间】:2020-04-05 23:05:38
【问题描述】:

使用 CAS 5.3.x 和 SPNEGO (Kerberos) 身份验证,我如何获得比 SAMAccountName 更多的用户属性?

当我只使用“标准”的 LDAP 身份验证处理程序时,我可以把这个配置:

cas.authn.ldap[0].principalAttributeList=sAMAccountName,displayName,givenName,mail

但在 SPNEGO 身份验证后,我没有获得这些附加属性。

你知道怎么做吗?

【问题讨论】:

    标签: authentication kerberos cas spnego


    【解决方案1】:

    自 CAS 3.x 以来,从外部数据存储中获取属性的功能就已经存在。直到今天,这个功能都由一个名为 Person Directory 的 Apereo 项目提供,该项目是一个 Java 框架,用于从各种底层资源中解析人员和属性。它由一组组件组成,这些组件从 JDBC、LDAP 等中检索、缓存、解析、聚合和合并人员属性。 CAS 试图通过一个名为PrincipalResolver 的概念来利用这个框架,其目标是为 CAS 构造一个最终可识别的经过身份验证的主体,其中包含许多从属性存储库源获取的属性。这意味着,例如,可以在一个查询中使用 SPNEGO 进行身份验证,然后转而使用 ask LDAP、一个关系数据库和一个 Groovy 脚本来获取已解析主体的属性并将所有结果合并到一个最终集合中。

    请注意,在大多数情况下,例如直接 LDAP 身份验证,从 CAS 4.x 开始,身份验证引擎已得到增强,能够从身份验证源检索和解析属性,这将消除对配置单独的属性存储库/解析器,尤其是在身份验证和属性源相同的情况下。只有在来源不同或需要处理更高级的属性解析用例(如级联、合并等)时才需要使用单独的解析器和来源。

    要将 CAS 配置为对属性存储库使用外部 LDAP,请使用:

    cas.authn.attribute-repository.ldap[0].attributes.uid=uid
    cas.authn.attribute-repository.ldap[0].attributes.displayName=displayName
    cas.authn.attribute-repository.ldap[0].attributes.cn=commonName
    cas.authn.attribute-repository.ldap[0].attributes.memberOf=memberOf
    
    cas.authn.attribute-repository.ldap[0].ldapUrl=ldap://...
    cas.authn.attribute-repository.ldap[0].useSsl=false
    cas.authn.attribute-repository.ldap[0].useStartTls=false
    cas.authn.attribute-repository.ldap[0].baseDn=dc=example,dc=edu
    cas.authn.attribute-repository.ldap[0].searchFilter=uid={0}
    cas.authn.attribute-repository.ldap[0].bindDn=...
    cas.authn.attribute-repository.ldap[0].bindCredential=...
    

    【讨论】:

    • 您在两段中解释了在数十个 CAS 文档页面中根本不清楚的内容。非常感谢你。我们会尝试,如果有任何问题,我会回到这里。
    • 不客气。请注意,CAS 文档是一个“字典”。一个人不能通过简单地记住字典来准确地学习一门新语言。可以在此处找到说明和演练:fawnoos.com/blog 或此处:apereo.github.io 事实上,我上面的答案是从 Apereo/Fawnoos 博客文章中逐字复制的 :) 如果您环顾四周,您会发现更多可能对您有所帮助的信息未来的问题也是如此。
    • 谢谢。我知道 apereo “博客”,但不知道 fawnoos。非常好的资源。 CAS 信息的碎片化状态以及缺乏完整、完整的文档和教程,使得您很难在不碰壁的情况下提高您的 CAS 技能。例如,列出所有配置属性的大页面不能真正被视为字典,因为有所有“单词”(不同的配置属性)但并不总是“定义”(属性的作用)!与之前相比,它变得更好了,但仍然如此。无论如何,谢谢!
    • 我完全理解。如果它仍然有帮助,属性的定义会自动随 CAS 一起提供。如果您浏览博客,您会发现有关配置元数据的帖子以及它们为何如此的许多原因。也就是说,不言而喻,重大改进是有序的。无论是在财务上还是技术上,考虑为项目做出贡献以改善事物的状态。
    • 架构上没有区别。主要是重命名或移动的设置。主要区别在于 CAS 6 需要 Java 11。我建议您查看 apereo 博客,并查看每个 v6 候选版本的发行说明。这应该会给你一个很好的主意。
    猜你喜欢
    • 2013-12-14
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多