锁定老帖子 主题:JAAS 学习笔记
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (10)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-14
JAASResource:http://hintcnuie.iteye.com/blog/245239
Authentication, Authorization and Access Control
The primary goal of JAAS is to manage the granting of permissions and performing security checks for those permissions.
1.Authentication
1.1 Concept
Principal is one of identifers of a subject.
Subject is a collection of principals. Credential is a prove of principal, it could be any type of object.
Authentication:The process to identify subject and attach credentials and principals to a subject.
LoginModule: provide a pluggable way to have system support JAAS. used for authentication(login, and principals, credentials binding) (authentication technology providers interface) LoginContext:describes the basic methods used to authenticate Subjects and provides a way to develop an application independent of the underlying authentication technology. (Application Interface)
Configuration:determine which LoginModules should be used, and which ones must succeed in order for the overall authentication to succeed(consits of AppConfigurationEntrys). CallbackHandler: communicate and interact with users to gather identification information CallBack: store information gathered by CallbackHandler;
1.2Authentication Progress
Application employ LoginContext to get a authenticated Subject. At this time, LoginContext will ask the Configuration for the plugined LoginModules, and call each LoginModule to attach principals and credentials to Subject(owned by each LoginModule or LoginContext).
Before each LoginModule attach principals and credentials, there will be a chance for LoginModule to judge whether to attach or not, it employ CallbackHandler to collect informations in the CallBacks. If the collected information is valid, it could do attach now(in LoginContext is commit).
2.Authorization && AccessControl
2.1 Concept
Permission defines what kind of actions on a target.
Permission = Permission Type + Target(permission effect on) + Action(Optional) Not a subject but principal is assigned to a permission(defined by policy).
Policy: defines which permission are granted to a given security context(principal).(Deploying time And RunTime)
Authorization: binding permissions to princpals(policy)
Acess Control: access sensitive code employ AccessControler or Security Mananger to check subject have the right to access resources.
ProtectDomain: encapsulates a set of classes whose instances are granted a set of permissions when being executed on behalf of a given
set of Principals.
2.2 Acess Control Progress
3. Two Extensible Interface Subject -- Principals -- Permission: Jaas employs Pricipals to decouple the Subject and Principals.
Configuration: support to dynamicly or staticly add/remove/edit LoginModules which attach pricipals to Subject.
It judges which pricipals a Subject could have.
Policy: support to dynamicly or staticly add/remove permissions to a principal.
It judges which permissions a principal could have.
4. JAAS in Tomcat Realm: as LoginModule, authenticate a user based on a username and password, adding “roles” to that user if authentication was successful.
defined as Realm in server.xml
Role: as Principal, defined as security-role in web.xml
Authenticator: as access controller to take access control function. defined as login-config in web.xml.
It look down security-constraint to check.
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-14
在了解jaas之前一直搞不懂安全问题,以往我们做系统的权限都是由系统开发人员自己完成,比如局长有所有功能权限,管理员只有创建用户的权限等等。。。我起先还以为jaas是一个基于快速构建类似权限策略的框架,可是我了解了之后发现不是.
jaas提供了系统访问权限而不是应用级别的权限,jaas宣扬的是安全,而平常我们说的访问是用户权限,我突然意识到这两个概念的不同,安全是作为权限背后的保障机制出现的,比如用户定义权限“张三登陆系统不能进入申报页面”,这直接影响了系统流程,那么如果用jaas描述,很难讲“张三登陆系统不能读取名为submit.txt的文件”在整个应用系统中有什么业务含义。所以jaas几乎没法用来控制流程和表现业务,而是用来作为权限背后的保障机制。比如:“张三不能进入申报页面”,而进行申报的第一个环节就是读取submit.txt,开发人员实现这个权限全靠隐藏申报页面,但是倘若张三用某个软件或者系统bug显示了这个隐藏页面(看起来不难),那么如果在policy中配置张三不能读取submit.txt的策略,纵使张三突破隐藏页面的防线,也没有任何办法越过jaas的控制。 所以在我认识中jaas不是用于控制系统流程和表现业务而是提供保障机制,这也是我看待“安全”和“权限”的区别,我不知道在国内项目中有多少项目特别重视jaas,至少到现在位置,我做过项目中,隐藏页面我们就默许为安全了:) jaas还牵涉思考一个问题就是,通常的权限主体是登陆用户,这就需要policy文件与人员库整合统一. |
|
返回顶楼 | |
发表时间:2009-04-14
应该可以这样认为,JAAS为认证授权以及访问控制提供了一个基本实现。在JAAS中, Subject,Principals,Permission是三个很重要的概念。把Permission简单的看作只是一个文件如submit.txt是从比较浅的层面看待Permssion。
在“张三登陆系统不能进入申报页面”的案例中: Permssion:定义“不能进入申报页面”的权限(Permission)。 Principle:定义诸如局长,管理员的Role 利用Configuration注册LoginModule实现Principal到Subject的绑定(即诸如分配给张三系统管理员身份)。 利用Policy来管理Principal(Role)是否具备某个权限。当然这个Policy不仅仅是一个Policy file,你可以从实现一个类似DbPolicy的东西去动态的发现和绑定权限。 |
|
返回顶楼 | |
发表时间:2009-04-14
最后修改:2009-04-14
我认为jaas是j2ee里最差劲的一块,幸好现在有了SpringSecurity,感谢上帝
|
|
返回顶楼 | |
发表时间:2009-04-14
最后修改:2009-04-14
dengtl 写道 应该可以这样认为,JAAS为认证授权以及访问控制提供了一个基本实现。在JAAS中, Subject,Principals,Permission是三个很重要的概念。把Permission简单的看作只是一个文件如submit.txt是从比较浅的层面看待Permssion。
在“张三登陆系统不能进入申报页面”的案例中: Permssion:定义“不能进入申报页面”的权限(Permission)。 Principle:定义诸如局长,管理员的Role 利用Configuration注册LoginModule实现Principal到Subject的绑定(即诸如分配给张三系统管理员身份)。 利用Policy来管理Principal(Role)是否具备某个权限。当然这个Policy不仅仅是一个Policy file,你可以从实现一个类似DbPolicy的东西去动态的发现和绑定权限。 在应用一个级别的权限还是很零碎的,小到能不能看见某个页面的某个button,大到某组页面,甚至相同页面种不同的数据,那么你确信jaas的Permssion能够灵活的用来描述种种权限相关设计事物?你确信在服务器上配置配置jaas就能做到不用单独开发权限模块,就像jee组件化所承诺的那样? |
|
返回顶楼 | |
发表时间:2009-04-14
最后修改:2009-04-15
非也,我并没有说JAAS就是一个应用级别上,直接拿来就很好用的东西。JAAS为授权认证及访问控制提供了基本实现,但基于其开发类RBAC的框架或模块不是很难的事情。JAAS相比业务系统较为抽象,但JAAS为授权认证有很好的概念和灵活的扩展机制,这些皆不可小虚之。
|
|
返回顶楼 | |
发表时间:2009-04-14
现在有一个很现实的问题,假如JAAS摆在面前,你给他什么名分,他在整个项目开发中扮演什么角色,还是遗弃?sun的东西可扩展性完全不用怀疑,现在就是个可工程化的问题,把他用在工程里远不是做个demo那么简单,要考虑很多问题。
RABC基本上已经肯定要自己实现,而且根据业务不同区别很大,没法真正统一口径,但是我认为RABC并非真正解决了安全问题,他只能屏蔽一些一般电脑用户不会随意进入别人的工作区,但是毕竟是配置权限,根据权限隐藏控件,实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求,也就是说传统RABC毕竟是客户端解决的权限问题。 那么jaas是不是可以定位为在服务器上解决安全问题的组件呢,因为jaas是控制代码的访问,才是真正意义的安全。 |
|
返回顶楼 | |
发表时间:2009-04-15
unsid 写道 现在有一个很现实的问题,假如JAAS摆在面前,你给他什么名分,他在整个项目开发中扮演什么角色,还是遗弃?sun的东西可扩展性完全不用怀疑,现在就是个可工程化的问题,把他用在工程里远不是做个demo那么简单,要考虑很多问题。
RABC基本上已经肯定要自己实现,而且根据业务不同区别很大,没法真正统一口径,但是我认为RABC并非真正解决了安全问题,他只能屏蔽一些一般电脑用户不会随意进入别人的工作区,但是毕竟是配置权限,根据权限隐藏控件,实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求,也就是说传统RABC毕竟是客户端解决的权限问题。 那么jaas是不是可以定位为在服务器上解决安全问题的组件呢,因为jaas是控制代码的访问,才是真正意义的安全。 |
|
返回顶楼 | |
发表时间:2009-04-15
unsid 写道 现在有一个很现实的问题,假如JAAS摆在面前,你给他什么名分,他在整个项目开发中扮演什么角色,还是遗弃?sun的东西可扩展性完全不用怀疑,现在就是个可工程化的问题,把他用在工程里远不是做个demo那么简单,要考虑很多问题。
RABC基本上已经肯定要自己实现,而且根据业务不同区别很大,没法真正统一口径,但是我认为RABC并非真正解决了安全问题,他只能屏蔽一些一般电脑用户不会随意进入别人的工作区,但是毕竟是配置权限,根据权限隐藏控件,实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求,也就是说传统RABC毕竟是客户端解决的权限问题。 那么jaas是不是可以定位为在服务器上解决安全问题的组件呢,因为jaas是控制代码的访问,才是真正意义的安全。 我很以老兄的话为不然。权限访问控制更应该注重对是对后台Service的访问控制。因而根本不会出现“实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求”。如果是那样,说明这个系统的安全完全是错误的或者是假的。至于UI控件,隐藏不隐藏,我认为不是权限控制的范围,完全是由UI决定,只是为了方便用户的使用吧了。 |
|
返回顶楼 | |
发表时间:2009-04-15
dengtl 写道 unsid 写道 现在有一个很现实的问题,假如JAAS摆在面前,你给他什么名分,他在整个项目开发中扮演什么角色,还是遗弃?sun的东西可扩展性完全不用怀疑,现在就是个可工程化的问题,把他用在工程里远不是做个demo那么简单,要考虑很多问题。
RABC基本上已经肯定要自己实现,而且根据业务不同区别很大,没法真正统一口径,但是我认为RABC并非真正解决了安全问题,他只能屏蔽一些一般电脑用户不会随意进入别人的工作区,但是毕竟是配置权限,根据权限隐藏控件,实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求,也就是说传统RABC毕竟是客户端解决的权限问题。 那么jaas是不是可以定位为在服务器上解决安全问题的组件呢,因为jaas是控制代码的访问,才是真正意义的安全。 我很以老兄的话为不然。权限访问控制更应该注重对是对后台Service的访问控制。因而根本不会出现“实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求”。如果是那样,说明这个系统的安全完全是错误的或者是假的。至于UI控件,隐藏不隐藏,我认为不是权限控制的范围,完全是由UI决定,只是为了方便用户的使用吧了。 你把应用级别的权限为题总结为RABC,这个工作到底做了哪些事情呢?他根据自己的库,查出某个用户所有的权限,然后根据权限不同返回给浏览器一个包含不同元素的html代码,用户自然看到不同的东西。 你想解决实质的安全问题,用户除了看到不同的东西,确确实实并不应该能用这个东西,然后引入一个实际上解决了服务器级别验证用户是否可执行某一种资源操作的jaas,而且资源访问级别的控制,被jvm包的严严实实,不太容易有第三方开源产品,然后引出本帖你对jaas的推崇 以上是我的分析 |
|
返回顶楼 | |