欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java认证与授权服务JAAS基础概念

程序员文章站 2024-02-28 12:10:58
...

1. 前言

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

2. 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);

3. LoginContext

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

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

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

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

4. LoginModule

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

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

LoginModule中涉及到两个主要方法为logincommit

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

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

5. 总结

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

  • Subject 描述要进行认证的对象实体/服务,以及与之有关的安全信息。
  • LoginContext 认证上下文,提供了登录/认证相关的基础方法。LoginContext的认证由具体的LoginModule实现。
  • LoginModule 认证服务接口类,不同的认证服务均需要实现该接口。
相关标签: kerberos