zoukankan      html  css  js  c++  java
  • 31. Java Authentication and Authorization Service (JAAS) Provider

    31.1 Overview

    Spring Security提供了一个能够将身份验证请求委托给Java身份验证和授权服务(JAAS)的包。这个包将在下面详细讨论。

    31.2 AbstractJaasAuthenticationProvider

    抽象身份验证提供程序(AbstractJaasAuthenticationProvider )是所提供的JAAS身份验证提供程序(AuthenticationProvider)实现的基础。子类必须实现一个创建逻辑上下文的方法。抽象JaasAuthenticationProvider有许多可以注入其中的依赖项,下面将对此进行讨论。

    31.2.1 JAAS CallbackHandler

    大多数JAAS逻辑模块都需要某种回调。这些回调通常用于从用户那里获取用户名和密码。

    在Spring Security部署中,Spring Security负责这种用户交互(通过身份验证机制)。因此,当认证请求被委托给JAAS时,Spring Security的身份验证机制已经完全填充了一个身份验证对象,该对象包含JAAS登录模块(LoginModule)所需的所有信息。因此,Spring Security的JAAS包提供了两个默认的回调处理程序,JaasNameCallbackHandler和JaasPasswordCallbackHandler。这些回调处理程序中的每一个都实现了JaasAuthenticationCallbackHandler。在大多数情况下,这些回调处理程序可以在不理解内部机制的情况下简单地使用。

    对于那些需要完全控制回调行为的人,内部抽象的JaasAuthenticationProvider用一个InternalCallbackHandler包装这些JaasAuthenticationCallbackHandler。InternalCallbackHandler是实际实现JAAS普通回调处理程序CallbackHandler 接口的类。每当使用JAAS逻辑模块LoginModule 时,它都会被传递一个已配置的应用程序上下文列表,如果登录模块请求对InternalCallbackHandler进行回调,回调将依次传递给正在包装的JaasAuthenticationCallbackHandler。

    31.2.2 JAAS AuthorityGranter

    JAAS和主角一起工作。在JAAS,甚至连“角色”都被描绘成主角。另一方面,Spring Security与身份验证对象一起工作。每个身份验证对象包含一个主体和多个授权(GrantedAuthority )。为了便于这些不同概念之间的映射,Spring Security的JAAS包包含了一个授权者(AuthorityGranter)接口。

    授权者负责检查JAAS主体并返回一组字符串,代表分配给主体的授权。对于每个返回的授权字符串,抽象JaasAuthenticationProvider创建一个JaasGrantedAuthority(它实现了Spring Security的GrantedAuthority接口),包含授权字符串和授权者被传递的JAAS主体。抽象身份验证提供程序AbstractJaasAuthenticationProvider 首先使用JAAS登录模块LoginModule成功验证用户的凭据,然后访问它返回的登录上下文LoginContext ,从而获得JAAS主体。对LoginContext.getSubject().getPrincipals()的调用。并将每个生成的主体传递给根据抽象身份验证提供程序.设置授权者(列表)AbstractJaasAuthenticationProvider.setAuthorityGranters(List)属性定义的每个授权者。考虑到每个JAAS原则都有特定于实现的含义,Spring Security不包括任何生产授权者。但是,单元测试中有一个测试授权者,它演示了一个简单的授权者实现。

    31.3 DefaultJaasAuthenticationProvider

    默认身份验证提供程序DefaultJaasAuthenticationProvider 允许将JAAS配置对象作为依赖项注入其中。然后,它使用注入的JAAS配置创建一个逻辑上下文LoginContext 。这意味着DefaultJaasAuthenticationProvider不像Jaas authentication Provider那样绑定任何特定的配置实现。

    31.3.1 InMemoryConfiguration

    为了便于将配置注入到DefaultJaasauthenticationProvider中,提供了一个名为InMemoryConfiguration的默认内存实现。实现构造函数接受一个map,其中每个键代表一个登录配置名称,值代表一个应用配置条目数组。内存配置InMemoryConfiguration还支持默认的应用配置条目对象AppConfigurationEntry 数组,如果在提供的Map中没有找到映射,将使用该数组。有关详细信息,请参考InMemoryConfiguration的类级javadoc。

    31.3.2 DefaultJaasAuthenticationProvider Example Configuration

    虽然在内存配置中的Spring配置可能比标准的JAAS配置文件更详细,但是将它与默认的JaasAuthenticationProvider结合使用比JaasAuthenticationProvider更灵活,因为它不依赖于默认的配置实现。下面提供了一个使用内存配置InMemoryConfiguration 的DefaultJaasauthenticationProvider的配置示例。请注意,配置的自定义实现也可以很容易地注入到DefaultJaasauthenticationProvider中。


     

    31.4 JaasAuthenticationProvider

    JaasAuthenticationProvider假定默认配置是配置文件的一个实例。做出这一假设是为了尝试更新配置。JaasAuthenticationProvider然后使用默认配置Configuration 来创建登录上下文LoginContext。

    假设我们有一个JAAS登录配置文件,/WEB-INF/login.conf,包含以下内容:


     

    像所有的Spring安全beans一样,JaasAuthenticationProvider是通过应用程序上下文配置的。以下定义对应于上述JAAS登录配置文件:


     

    31.5 Running as a Subject

    配置后,JaasApiIntegrationFilter将尝试在JaasAuthenticationToken上作为主题运行。这意味着可以使用以下方式访问主题:


     

    使用jaas-api-provision属性可以很容易地配置这种集成。当与依赖于JAAS主题的遗留或外部应用编程接口集成时,此功能非常有用。

  • 相关阅读:
    Android 11 的5个新安全和隐私功能,不更新会面临被黑客入侵风险
    SSL / TLS新加密漏洞,黑客是这样读取敏感数据,看看修复方法!
    蓝牙新漏洞,黑客可以轻松控制你的手机,全球数亿台设备受影响
    Visa信用卡漏洞,新的PIN验证黑客可绕过,并进行非接触式付款
    思科是如何遭黑客入侵?原因:XSS缺陷到RCE缺陷
    WhatsApp现神秘漏洞,黑客可远程查看聊天记录
    郭盛华:免受网络黑客攻击的5个技巧
    Apache服务器现3个致命漏洞,黑客可远程监听
    centos 下安装python3 的MySQLdb
    MySQL创建用户与授权及删除
  • 原文地址:https://www.cnblogs.com/jrkl/p/13513570.html
Copyright © 2011-2022 走看看