Java认证与授权服务JAAS基础概念
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 Name
。LoginContext
的关键方法如下:
-
login
登录/认证,该过程由具体的LoginModule
代理完成。 -
logout
登出 -
getSubject
获取认证之后所创建的Subject
对象信息
初始化一个LoginContext
对象时,可以传入如下一些参数:
-
Context Name
[必选] -
Subject
[可选] -
CallbackHandler
[可选] -
Configuration
[可选]
4. LoginModule
LoginModule
提供了登录/认证的基础接口定义,所有的认证服务都需要实现该接口。一些典型的实现模块包括:
-
Krb5LoginModule
基于Kerberos
的登录/认证服务模块 -
JndiLoginModule
基于用户名和密码的登录/认证服务模块 -
KeyStoreLoginModule
基于KeyStore
的登录/认证服务模块
LoginModule
中涉及到两个主要方法为login
与commit
:
-
login
对Subject
进行认证。这个过程中主要涉及到用户名和密码信息提示,校验用户密码。认证结果将会在LoginModule
层面暂时保存。 -
commit
Commit
过程首先确认LoginModule
中保存的认证结果。认证成功之后,Commit
方法将Subject
内对应的Principals
以及Credentials
关联起来。如果Login
方法认证失败的话,则该方法将会清理在LoginModule
中保存的认证结果信息。
5. 总结
本文主要介绍了JAAS
中的三个基础概念:
-
Subject
描述要进行认证的对象实体/服务,以及与之有关的安全信息。 -
LoginContext
认证上下文,提供了登录/认证相关的基础方法。LoginContext
的认证由具体的LoginModule
实现。 -
LoginModule
认证服务接口类,不同的认证服务均需要实现该接口。
上一篇: 初识渗透理念01
下一篇: jQuery定时器简单使用
推荐阅读