JAAS 学习笔记JAASResource:http://hintcnuie.iteye.com/blog/245239?Authentication, Authorization and
JAAS 学习笔记
JAAS
Resource:http://hintcnuie.iteye.com/blog/245239
?
Authentication, Authorization and Access ControlThe 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 ProgressApplication 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 && AccessControl2.1 ConceptPermission 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.?? ?? ?? ?????
?
8 楼 dengtl 2009-04-15 unsid 写道现在有一个很现实的问题,假如JAAS摆在面前,你给他什么名分,他在整个项目开发中扮演什么角色,还是遗弃?sun的东西可扩展性完全不用怀疑,现在就是个可工程化的问题,把他用在工程里远不是做个demo那么简单,要考虑很多问题。
RABC基本上已经肯定要自己实现,而且根据业务不同区别很大,没法真正统一口径,但是我认为RABC并非真正解决了安全问题,他只能屏蔽一些一般电脑用户不会随意进入别人的工作区,但是毕竟是配置权限,根据权限隐藏控件,实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求,也就是说传统RABC毕竟是客户端解决的权限问题。
那么jaas是不是可以定位为在服务器上解决安全问题的组件呢,因为jaas是控制代码的访问,才是真正意义的安全。
我很以老兄的话为不然。权限访问控制更应该注重对是对后台Service的访问控制。因而根本不会出现“实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求”。如果是那样,说明这个系统的安全完全是错误的或者是假的。至于UI控件,隐藏不隐藏,我认为不是权限控制的范围,完全是由UI决定,只是为了方便用户的使用吧了。 9 楼 unsid 2009-04-15 dengtl 写道unsid 写道现在有一个很现实的问题,假如JAAS摆在面前,你给他什么名分,他在整个项目开发中扮演什么角色,还是遗弃?sun的东西可扩展性完全不用怀疑,现在就是个可工程化的问题,把他用在工程里远不是做个demo那么简单,要考虑很多问题。
RABC基本上已经肯定要自己实现,而且根据业务不同区别很大,没法真正统一口径,但是我认为RABC并非真正解决了安全问题,他只能屏蔽一些一般电脑用户不会随意进入别人的工作区,但是毕竟是配置权限,根据权限隐藏控件,实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求,也就是说传统RABC毕竟是客户端解决的权限问题。
那么jaas是不是可以定位为在服务器上解决安全问题的组件呢,因为jaas是控制代码的访问,才是真正意义的安全。
我很以老兄的话为不然。权限访问控制更应该注重对是对后台Service的访问控制。因而根本不会出现“实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求”。如果是那样,说明这个系统的安全完全是错误的或者是假的。至于UI控件,隐藏不隐藏,我认为不是权限控制的范围,完全是由UI决定,只是为了方便用户的使用吧了。
你把应用级别的权限为题总结为RABC,这个工作到底做了哪些事情呢?他根据自己的库,查出某个用户所有的权限,然后根据权限不同返回给浏览器一个包含不同元素的html代码,用户自然看到不同的东西。
你想解决实质的安全问题,用户除了看到不同的东西,确确实实并不应该能用这个东西,然后引入一个实际上解决了服务器级别验证用户是否可执行某一种资源操作的jaas,而且资源访问级别的控制,被jvm包的严严实实,不太容易有第三方开源产品,然后引出本帖你对jaas的推崇
以上是我的分析 10 楼 weizh 2009-04-15 你们做的权限,就只是隐藏了显示元素,而不是这个元素所能触发的动作?诧异。 11 楼 grandboy 2009-04-15 JAAS的最大特点就是灵活和标准。 Authentication及Authorization两个可以分开。 我觉得第一个A做得很好(个人觉得SUN的标准里也没有涉及太多第二个A的内容),并且也很方便,但是第二个A不是做得不是不好,是根本没有办法做好的。各个应用服务器都有自己的实现。并且实现机制和方式完全不一样。而第一个A实现却大家都遵照SUN的标准。我们现在只用这个部分。并且我也深入研究过JBoss和Tomcat里的实现, 本来写一个LoginModule, 可以在不同的地方使用, 但是涉及到Role这个概念,就搞得不能完全通用,最近我发现在JBoss5里的容器安全部分的实现和Jboss4的有些许不同。我们的产品要修改了。Tomcat的授权是用Realm来实现的,但是JBoss里EJB的权限是用Interceptor来实现的。我觉得尤其在使用EJB的时候,如果涉及权限,还是无法抛开JAAS吧。包括Weblogic也是一样的。如果想控制EJB这种与容器关系密切的权限的话,还真离不开JAAS这个东西。
凡事都有两面性,我们不能一棒子打死。如果没有用武之地,也早就该销声匿迹了。 12 楼 fansofjava 2009-04-16 其实Authorization并不复杂,只是不能通用而已。
如果用EJB开发的话,没有理由不用JAAS。 13 楼 unsid 2009-04-16 weizh 写道你们做的权限,就只是隐藏了显示元素,而不是这个元素所能触发的动作?诧异。
很正常,就是省事省心,虽然这样做不对,但是看起来用户好像并不需要,企业应用对数部署在企业内网,安全都交代给前端硬件了,然后就充当回掩耳盗铃,不了了之了呗,看起来你对这个很诧异,可能你做高端应用比较多的缘故。
14 楼 天下有鹏 2009-04-17 acegi也是一个不错的开源安全框架。
15 楼 whaosoft 2009-04-17 这个东西好用 还是acegi好使啊~~ 16 楼 zhxp791008 2009-04-17 JAAS应用于底层的安全控制,由SecurityManager、ClassCloader等完成,比如你想某个用户只能读取/tem的文件,或只能在10000端口上监听,那这个时候JAAS是最好的方法。如需要实现“某个用户不能删除用户”进行控制,这是个业务的权限控制,可能JAAS是不适合的。可以自定义Filter等方式实现,有很多应用用SpringSecurity实现,针对一些非常细的权限控制可能SpringSecurity可能无法完成,比如某个用户不能调用deleteUser.action这个功能,而这个信息保存在数据库中,可以动态通过界面进行修改。
我个人认为JAAS是个非常强大的功能,但是在真实的应用中我还没有用过(见过一个系统使用,但没有得到源码),并且使用还有很多知识需要学习。
不知道javaeye有没有人在真实项目中使用过JAAS。我想如果一个应用没有使用JAAS的话,这个系统是非常危险的,所有业务权限控制都会没用。
17 楼 unsid 2009-04-17 zhxp791008 写道JAAS应用于底层的安全控制,由SecurityManager、ClassCloader等完成,比如你想某个用户只能读取/tem的文件,或只能在10000端口上监听,那这个时候JAAS是最好的方法。如需要实现“某个用户不能删除用户”进行控制,这是个业务的权限控制,可能JAAS是不适合的。可以自定义Filter等方式实现,有很多应用用SpringSecurity实现,针对一些非常细的权限控制可能SpringSecurity可能无法完成,比如某个用户不能调用deleteUser.action这个功能,而这个信息保存在数据库中,可以动态通过界面进行修改。
我个人认为JAAS是个非常强大的功能,但是在真实的应用中我还没有用过(见过一个系统使用,但没有得到源码),并且使用还有很多知识需要学习。
不知道javaeye有没有人在真实项目中使用过JAAS。我想如果一个应用没有使用JAAS的话,这个系统是非常危险的,所有业务权限控制都会没用。
就是...就是..
概念好 --- 好用 --- 有用 --- 易于工程化
是不同概念和过程 18 楼 dengtl 2009-04-18 Spring的流行造就了Spring Security的流行。JAAS框架或许没有给工程应用提供一个完整性的指南,但这并不等同于JAAS就不支持。与Web集成进行权限控制,动态修改权限控制(Policy提供)都是完全支持的。当我看了JAAS的大部分代码,看了相应文档之后,发觉这真是一个不错的框架。作为我辈IT从业人员,可以从中学习一二,学习一些框架上的设计思路。我想这比熟练使用框架或知道某一个配置细节更为身心有益。 19 楼 benspring 2009-04-21 jaas框架刚开始是为了代码执行的安全性设计的,后来加入了subject和principal,User-Centric 的东西。policy文件只是java的一个默认实现,我们可以自己写policy代码的,check你所需要拦截的permission,例如需要对例如某行记录某人没有权限删除检查,policy 的implies可以包含这些决策信息,然后和后台的metadata数据库来比对,就可以知道当前用户有没有这样的权限了。有关容器的授权有个jacc的框架,似乎主流的container都有实现,可以check WebResourcePermission, EJBResourcePermission等等,大概是这样,我也记不清了。 20 楼 grandboy 2009-04-22 benspring 写道jaas框架刚开始是为了代码执行的安全性设计的,后来加入了subject和principal,User-Centric 的东西。policy文件只是java的一个默认实现,我们可以自己写policy代码的,check你所需要拦截的permission,例如需要对例如某行记录某人没有权限删除检查,policy 的implies可以包含这些决策信息,然后和后台的metadata数据库来比对,就可以知道当前用户有没有这样的权限了。有关容器的授权有个jacc的框架,似乎主流的container都有实现,可以check WebResourcePermission, EJBResourcePermission等等,大概是这样,我也记不清了。
我们现在就是把Tocmat,Jboss的容器安全部分接管,当然也可以两者同时使用。 21 楼 lxiaodao 2009-09-14 zhxp791008 写道
JAAS应用于底层的安全控制,由SecurityManager、ClassCloader等完成,比如你想某个用户只能读取/tem的文件,或只能在10000 端口上监听,那这个时候JAAS是最好的方法。如需要实现“某个用户不能删除用户”进行控制,这是个业务的权限控制,可能JAAS是不适合的。可以自定义 Filter等方式实现,有很多应用用SpringSecurity实现,
针对一些非常细的权限控制可能SpringSecurity可能无法完成,比如某个用户不能调用deleteUser.action这个功能,而这个信息保存在数据库中,可以动态通过界面进行修改。我个人认为JAAS是个非常强大的功能,但是在真实的应用中我还没有用过(见过一个系统使用,但没有得到源码),并且使用还有很多知识需要学习。
不知道javaeye有没有人在真实项目中使用过JAAS。我想如果一个应用没有使用JAAS的话,这个系统是非常危险的,所有业务权限控制都会没用。
晕死,这些springsecurity早都有了,从JAAS和springsecurity背后的理念来看,核心的理念没有本质区别啊。支持jaas的童鞋都没有说清楚为什么好,究竟好在哪里。