【问题标题】:Spring Security 3 custom authentication by REMOTE_USERREMOTE_USER 的 Spring Security 3 自定义身份验证
【发布时间】:2011-08-02 07:31:25
【问题描述】:

我需要使用 Spring security 3.0.5 实现自定义安全方案。

用户必须通过请求中的REMOTE_USER 字段自动进行身份验证(无需任何登录表单)。看来我必须实现自定义AbstractAuthenticationProcessingFilterAuthenticationManager

我的方向正确吗? XML 配置可能是什么?

【问题讨论】:

    标签: spring-security


    【解决方案1】:

    您想接受其他代理人的身份断言?很公平;在某些情况下这是有意义的。但是,您必须验证这些断言;有很多方法可以做到这一点,这里有一些:

    • 如果您与断言实体共享数据库,则可以检查幻数。
    • 您可以使用加密签名
    • 您可以检查消息是否来自允许进行此类断言的主机 - 该主机应位于您控制的网络内,并且您也可以控制其间的路径,这很容易做到,但很关键您需要记录的部署因素。

    最简单的方法可能是编写自己的AuthenticationProvider,其工作是查看提供的凭据(REMOTE_USER 字段以及在您的案例中声明它的人)并决定是否构建Authentication目的。如果不是,它应该抛出一个异常。您像这样注册您的身份验证提供程序(假设它是一个名为 myAuthProvider 的 bean):

    <security:authentication-manager>
        <security:authentication-provider ref="myAuthProvider" />
    </security:authentication-manager>
    

    正如我所说,您需要有一个身份验证提供程序。如果用户名是通过 HTTP 标头提供的,而您只是要信任它,那么您实际上处于所谓的预身份验证案例中(即,还有其他事情为您完成了身份验证步骤)。 Spring Security 文档有一个whole chapter on this,以 Siteminder 为例:只需更改标头名称即可。 (好吧,您还需要一个用户详细信息服务,以便您可以从经过身份验证的用户映射到他们被授予的权限集,但这是一个完整的“另一回事。”

    【讨论】:

    • 非常感谢,看来这个预认证场景正是我需要做的。会试试的!
    • @never:很高兴能帮上忙。不过要小心:很容易出现安全错误并意外打开东西(根据经验!)。您必须在部署后对其进行测试,并使用未经身份验证的客户端进行测试。
    猜你喜欢
    • 2014-04-20
    • 2014-12-13
    • 2016-08-05
    • 2020-12-05
    • 2015-04-27
    • 2014-01-12
    • 2016-09-05
    • 2021-04-21
    • 2016-10-31
    相关资源
    最近更新 更多