核心类和接口
与JAAS相关的核心类和接口,可以分为三类:
公共类:
Subject, Principal, Credential
认证类和接口:
LoginContext, LoginModule, CallbackHandler, Callback
授权类:
Policy, AuthPermission, PrivateCredentialPermission
公共类
javax.security.auth.Subject是JAAS的关键类,代表了关于一个主体的一组相关信息。包括主体的Principal, public credentials,and private credentials。
java.security.Principal接口被用来代表当事人。
JAAS定义的Credential可以是任何Object.
Subject
认证类和接口
认证一个subject(用户或服务),按如下步骤执行:
1、实例化LoginContext
2、LoginContext查阅Configuration加载所有的LoginModuleS配置
3、调用LoginContext的login方法
4、login方法内调用所有加载的LoginModuleS。每一个LoginModule试图认证subject。一旦成功,LoginModules 关联相关Principals 和Credentials 关于Subject对象,对象代表经过身份验证的subject。
5、LoginContext 返回认证状态status
6、如果认证成功,从LoginContext中得到Subject。
授权类(Authorization Classes)
授于访问控制权限,不仅基于什么代码在运行,还要基于谁在运行它。前置条件:
1、用户必须被认证,就像在LoginContext中所描述的。
2、认证的结果Subject必须与访问控制上下文关联,就像在Subject中描述的。
3、基于Principal的条目必须配置在安全策略中,就像我们下面正要描述。
Policy
java.security.Policy是代表了系统范围的访问控制策略的抽象类。在JDK1.4加入Policy API来支持基于Principal的查询。
JDK默认提供了基于文件的子类实现,
AuthPermission
javax.security.auth.AuthPermission此类用于验证权限。AuthPermission 包含一个名称(也称为“目标名称”),但没有动作列表;您并非一定拥有所指定的权限。
目标名称就是安全配置参数的名称(见API)。目前 AuthPermission 对象可用来保护对 Policy、Subject、LoginContext 和 Configuration 对象的访问。
PrivateCredentialPermission
javax.security.auth.PrivateCredentialPermission保护访问Subject的私有Credential,并提供一个公共构建函数
public PrivateCredentialPermission(String name, String actions);