zoukankan      html  css  js  c++  java
  • Java认证与授权服务JAAS基础概念

    转:http://www.nosqlnotes.com/technotes/jaas-concept/

    JAAS是”Java Authentication and Authorization Service“的缩写,它提供了认证与授权的基础框架与接口定义,而且提供了良好的插件化机制。本文主要探讨JAAS的基础概念,这些概念也是认证与授权技术中的常用概念。

    Subject

    如果要授权访问一些资源,需要先对资源请求主体进行认证。JAAS框架中,使用Subject来描述这个资源请求主体与安全访问相关的信息,因此,一个Subject通常是指一个对象实体,或者一个服务。
    Subject中所关联的信息,主要涉及:

    • 身份信息
    • 密码信息
    • 加密密钥/凭据信息

    一个Subject可能拥有一个或多个身份,一个身份被称之为Principal,也就是说,一个Subject可能关联一个或多个Principals。
    一个Subject可能涉及与安全有关的凭据信息(密钥/票据),称之为Credentials。敏感的Credentials需要特别的保护措施,例如,私有密钥信息,被保存在一个私钥集合中。而关于公有秘钥信息,则被保存在另外一个公钥集合中。

    如下示例代码给出了如何为一个Subject添加Principal以及公钥信息:

    Subject subject;
    Principal principal;
    Object credential;
    ​
    // 获取所有的Principals列表,并且加入新的Principal。
    subject.getPrincipals().add(principal);
    // 获取公钥列表信息,并加入新的公钥列表。
    subject.getPublicCredentials().add(credential);
    

      

    LoginContext

    认证上下文信息。LoginContext中提供了针对Subject对象进行认证的基础方法,每一个LoginContext都关联一个Context Name。LoginContext的关键方法如下:

    • login 登录/认证,该过程由具体的LoginModule代理完成。
    • logout 登出
    • getSubject 获取认证之后所创建的Subject对象信息

    初始化一个LoginContext对象时,可以传入如下一些参数:

    • Context Name[必选]
    • Subject[可选]
    • CallbackHandler[可选]
    • Configuration[可选]

    LoginModule

    LoginModule提供了登录/认证的基础接口定义,所有的认证服务都需要实现该接口。一些典型的实现模块包括:

    • Krb5LoginModule 基于Kerberos的登录/认证服务模块
    • JndiLoginModule 基于用户名和密码的登录/认证服务模块
    • KeyStoreLoginModule 基于KeyStore的登录/认证服务模块

    LoginModule中涉及到两个主要方法为login与’commit’:

    login

    对Subject进行认证。

    这个过程中主要涉及到用户名和密码信息提示,校验用户密码。认证结果将会在LoginModule层面暂时保存。

    commit

    Commit过程首先确认LoginModule中保存的认证结果。认证成功之后,Commit方法将Subject内对应的Principals以及Credentials关联起来。如果Login方法认证失败的话,则该方法将会清理在LoginModule中保存的认证结果信息。

    总结

    本文主要介绍了JAAS中的三个基础概念:

    • Subject 描述要进行认证的对象实体/服务,以及与之有关的安全信息。
    • LoginContext 认证上下文,提供了登录/认证相关的基础方法。LoginContext的认证由具体的LoginModule实现。
    • LoginModule 认证服务接口类,不同的认证服务均需要实现该接口。
  • 相关阅读:
    JS基础学习四:绑定事件
    常用JS事件对象
    jq 使用手册
    access数据库根据指定日期进行查询
    IP地址变动后,https://localhost:1158/em无法访问解决办法
    结构体对齐方式
    宏得到当前函数的名字
    std::list保存大量数据时,类型即是无析构函数,该list析构时会占用大量CPU
    装了vs2010 SP1后,开机速度慢
    查询SQL Server版本号
  • 原文地址:https://www.cnblogs.com/leodaxin/p/8874559.html
Copyright © 2011-2022 走看看