`
dengtl
  • 浏览: 6773 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多

JAAS

Resource: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.
     
  
 
 
 
 
 

 

  • 大小: 22.9 KB
分享到:
评论
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的童鞋都没有说清楚为什么好,究竟好在哪里。
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的容器安全部分接管,当然也可以两者同时使用。
19 楼 benspring 2009-04-21  
jaas框架刚开始是为了代码执行的安全性设计的,后来加入了subject和principal,User-Centric 的东西。policy文件只是java的一个默认实现,我们可以自己写policy代码的,check你所需要拦截的permission,例如需要对例如某行记录某人没有权限删除检查,policy 的implies可以包含这些决策信息,然后和后台的metadata数据库来比对,就可以知道当前用户有没有这样的权限了。有关容器的授权有个jacc的框架,似乎主流的container都有实现,可以check WebResourcePermission, EJBResourcePermission等等,大概是这样,我也记不清了。
18 楼 dengtl 2009-04-18  
Spring的流行造就了Spring Security的流行。JAAS框架或许没有给工程应用提供一个完整性的指南,但这并不等同于JAAS就不支持。与Web集成进行权限控制,动态修改权限控制(Policy提供)都是完全支持的。当我看了JAAS的大部分代码,看了相应文档之后,发觉这真是一个不错的框架。作为我辈IT从业人员,可以从中学习一二,学习一些框架上的设计思路。我想这比熟练使用框架或知道某一个配置细节更为身心有益。
17 楼 unsid 2009-04-17  
zhxp791008 写道
JAAS应用于底层的安全控制,由SecurityManager、ClassCloader等完成,比如你想某个用户只能读取/tem的文件,或只能在10000端口上监听,那这个时候JAAS是最好的方法。如需要实现“某个用户不能删除用户”进行控制,这是个业务的权限控制,可能JAAS是不适合的。可以自定义Filter等方式实现,有很多应用用SpringSecurity实现,针对一些非常细的权限控制可能SpringSecurity可能无法完成,比如某个用户不能调用deleteUser.action这个功能,而这个信息保存在数据库中,可以动态通过界面进行修改。
我个人认为JAAS是个非常强大的功能,但是在真实的应用中我还没有用过(见过一个系统使用,但没有得到源码),并且使用还有很多知识需要学习。
不知道javaeye有没有人在真实项目中使用过JAAS。我想如果一个应用没有使用JAAS的话,这个系统是非常危险的,所有业务权限控制都会没用。


就是...就是..
概念好 --- 好用 --- 有用 --- 易于工程化
是不同概念和过程
16 楼 zhxp791008 2009-04-17  
JAAS应用于底层的安全控制,由SecurityManager、ClassCloader等完成,比如你想某个用户只能读取/tem的文件,或只能在10000端口上监听,那这个时候JAAS是最好的方法。如需要实现“某个用户不能删除用户”进行控制,这是个业务的权限控制,可能JAAS是不适合的。可以自定义Filter等方式实现,有很多应用用SpringSecurity实现,针对一些非常细的权限控制可能SpringSecurity可能无法完成,比如某个用户不能调用deleteUser.action这个功能,而这个信息保存在数据库中,可以动态通过界面进行修改。
我个人认为JAAS是个非常强大的功能,但是在真实的应用中我还没有用过(见过一个系统使用,但没有得到源码),并且使用还有很多知识需要学习。
不知道javaeye有没有人在真实项目中使用过JAAS。我想如果一个应用没有使用JAAS的话,这个系统是非常危险的,所有业务权限控制都会没用。
15 楼 whaosoft 2009-04-17  
这个东西好用 还是acegi好使啊~~
14 楼 天下有鹏 2009-04-17  
acegi也是一个不错的开源安全框架。

13 楼 unsid 2009-04-16  
weizh 写道
你们做的权限,就只是隐藏了显示元素,而不是这个元素所能触发的动作?诧异。


很正常,就是省事省心,虽然这样做不对,但是看起来用户好像并不需要,企业应用对数部署在企业内网,安全都交代给前端硬件了,然后就充当回掩耳盗铃,不了了之了呗,看起来你对这个很诧异,可能你做高端应用比较多的缘故。
12 楼 fansofjava 2009-04-16  
其实Authorization并不复杂,只是不能通用而已。
如果用EJB开发的话,没有理由不用JAAS。
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这个东西。

凡事都有两面性,我们不能一棒子打死。如果没有用武之地,也早就该销声匿迹了。
10 楼 weizh 2009-04-15  
你们做的权限,就只是隐藏了显示元素,而不是这个元素所能触发的动作?诧异。
9 楼 unsid 2009-04-15  
dengtl 写道
unsid 写道
现在有一个很现实的问题,假如JAAS摆在面前,你给他什么名分,他在整个项目开发中扮演什么角色,还是遗弃?sun的东西可扩展性完全不用怀疑,现在就是个可工程化的问题,把他用在工程里远不是做个demo那么简单,要考虑很多问题。

RABC基本上已经肯定要自己实现,而且根据业务不同区别很大,没法真正统一口径,但是我认为RABC并非真正解决了安全问题,他只能屏蔽一些一般电脑用户不会随意进入别人的工作区,但是毕竟是配置权限,根据权限隐藏控件,实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求,也就是说传统RABC毕竟是客户端解决的权限问题。
那么jaas是不是可以定位为在服务器上解决安全问题的组件呢,因为jaas是控制代码的访问,才是真正意义的安全。

我很以老兄的话为不然。权限访问控制更应该注重对是对后台Service的访问控制。因而根本不会出现“实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求”。如果是那样,说明这个系统的安全完全是错误的或者是假的。至于UI控件,隐藏不隐藏,我认为不是权限控制的范围,完全是由UI决定,只是为了方便用户的使用吧了。


你把应用级别的权限为题总结为RABC,这个工作到底做了哪些事情呢?他根据自己的库,查出某个用户所有的权限,然后根据权限不同返回给浏览器一个包含不同元素的html代码,用户自然看到不同的东西。

你想解决实质的安全问题,用户除了看到不同的东西,确确实实并不应该能用这个东西,然后引入一个实际上解决了服务器级别验证用户是否可执行某一种资源操作的jaas,而且资源访问级别的控制,被jvm包的严严实实,不太容易有第三方开源产品,然后引出本帖你对jaas的推崇

以上是我的分析
8 楼 dengtl 2009-04-15  
unsid 写道
现在有一个很现实的问题,假如JAAS摆在面前,你给他什么名分,他在整个项目开发中扮演什么角色,还是遗弃?sun的东西可扩展性完全不用怀疑,现在就是个可工程化的问题,把他用在工程里远不是做个demo那么简单,要考虑很多问题。

RABC基本上已经肯定要自己实现,而且根据业务不同区别很大,没法真正统一口径,但是我认为RABC并非真正解决了安全问题,他只能屏蔽一些一般电脑用户不会随意进入别人的工作区,但是毕竟是配置权限,根据权限隐藏控件,实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求,也就是说传统RABC毕竟是客户端解决的权限问题。
那么jaas是不是可以定位为在服务器上解决安全问题的组件呢,因为jaas是控制代码的访问,才是真正意义的安全。

我很以老兄的话为不然。权限访问控制更应该注重对是对后台Service的访问控制。因而根本不会出现“实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求”。如果是那样,说明这个系统的安全完全是错误的或者是假的。至于UI控件,隐藏不隐藏,我认为不是权限控制的范围,完全是由UI决定,只是为了方便用户的使用吧了。
7 楼 daquan198163 2009-04-15  
unsid 写道
现在有一个很现实的问题,假如JAAS摆在面前,你给他什么名分,他在整个项目开发中扮演什么角色,还是遗弃?sun的东西可扩展性完全不用怀疑,现在就是个可工程化的问题,把他用在工程里远不是做个demo那么简单,要考虑很多问题。

RABC基本上已经肯定要自己实现,而且根据业务不同区别很大,没法真正统一口径,但是我认为RABC并非真正解决了安全问题,他只能屏蔽一些一般电脑用户不会随意进入别人的工作区,但是毕竟是配置权限,根据权限隐藏控件,实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求,也就是说传统RABC毕竟是客户端解决的权限问题
那么jaas是不是可以定位为在服务器上解决安全问题的组件呢,因为jaas是控制代码的访问,才是真正意义的安全。

6 楼 unsid 2009-04-14  
现在有一个很现实的问题,假如JAAS摆在面前,你给他什么名分,他在整个项目开发中扮演什么角色,还是遗弃?sun的东西可扩展性完全不用怀疑,现在就是个可工程化的问题,把他用在工程里远不是做个demo那么简单,要考虑很多问题。

RABC基本上已经肯定要自己实现,而且根据业务不同区别很大,没法真正统一口径,但是我认为RABC并非真正解决了安全问题,他只能屏蔽一些一般电脑用户不会随意进入别人的工作区,但是毕竟是配置权限,根据权限隐藏控件,实质上一个了解计算机的人得知系统服务的名称,完全可以通过自己开发的访问程序向服务器提交不在自己权限内的请求,也就是说传统RABC毕竟是客户端解决的权限问题。
那么jaas是不是可以定位为在服务器上解决安全问题的组件呢,因为jaas是控制代码的访问,才是真正意义的安全。
5 楼 dengtl 2009-04-14  
非也,我并没有说JAAS就是一个应用级别上,直接拿来就很好用的东西。JAAS为授权认证及访问控制提供了基本实现,但基于其开发类RBAC的框架或模块不是很难的事情。JAAS相比业务系统较为抽象,但JAAS为授权认证有很好的概念和灵活的扩展机制,这些皆不可小虚之。
4 楼 unsid 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组件化所承诺的那样?
3 楼 daquan198163 2009-04-14  
我认为jaas是j2ee里最差劲的一块,幸好现在有了SpringSecurity,感谢上帝
2 楼 dengtl 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的东西去动态的发现和绑定权限。

相关推荐

    JAAS学习笔记

    通过阅读"JAAS学习笔记.doc"和"Weblogic Security Provider学习笔记.docx",我们可以更全面地了解这个主题。 1. **JAAS概述**: - JAAS是Java的安全框架,提供了一种标准化的方式来验证用户身份(认证)并控制对...

    Java-J2EE全部学习笔记 培训结构的学习资料

    这份"Java-J2EE全部学习笔记 培训结构的学习资料"涵盖了从基础到高级的Java编程和J2EE应用开发的知识点,对于想要深入理解Java EE技术的人来说是一份宝贵的资源。 1. **Java基础知识**:这部分可能包括Java语言的...

    2010年J2EE学习笔记

    【J2EE学习笔记概述】 J2EE,全称为Java 2 Platform, Enterprise Edition,是Oracle公司(原Sun Microsystems)推出的用于开发企业级分布式应用程序的平台。2010年的J2EE版本主要是指J2EE 5或早期的Java EE 6,这两...

    JBOSS7学习笔记

    【JBoss7学习笔记】 JBoss Application Server,简称JBoss AS,是Red Hat公司开发的一款开源Java EE应用服务器,而JBoss7则是其一个重要的版本,带来了许多性能优化和架构改进。这篇学习笔记将深入探讨JBoss7的核心...

    ejb 学习笔记6

    ### EJB学习笔记第六部分详解 #### 一、EJB之间的调用 EJB (Enterprise JavaBeans) 是Java EE平台中用于开发分布式企业应用程序的重要组件。在实际开发过程中,经常需要一个EJB调用另一个EJB来实现更复杂的业务...

    EJB学习笔记.rar

    2. **安全性**:通过JAAS(Java Authentication and Authorization Service)实现用户身份验证和权限控制,保护应用程序的安全。 3. **分布式性**:EJB组件可以在网络中的不同节点上部署和执行,实现了分布式计算。...

    tomcat学习精华笔记

    【Tomcat 学习精华笔记】 Tomcat 是一个广泛应用的开源服务器,主要用于托管Java Web应用程序。它虽然不是严格意义上的应用服务器,但作为一个Servlet容器,它能够处理Servlet和JSP,并且具备了一些应用服务器的...

    Java认证和授权服务笔记代码

    在本笔记代码中,我们将深入探讨JAAS的工作原理以及如何通过编程实现相关功能。 1. **JAAS的基本概念** - **认证(Authentication)**:验证用户或系统实体的身份,通常涉及用户名、密码、数字证书等凭证。 - **...

    MLDN_J2EE框架_笔记(已解密)

    这是一份专门针对J2EE技术的详细学习笔记,可能包含了从基础概念到高级应用的各个层面。 【描述】"MLDN_J2EE框架_笔记(已解密)"的描述虽然重复,但可以推测笔记内容是围绕J2EE框架展开的,可能包括了J2EE开发中的...

    J2EE笔记

    本笔记主要围绕J2EE的核心概念、主要组件以及它们的应用场景进行阐述。 ### 1. J2EE架构 J2EE架构采用分层设计,主要包括以下层次: - **表现层(Presentation Layer)**:用户界面,通常由Web组件(如HTML、...

    J2EE框架(笔记)

    学习J2EE框架,不仅需要理解其组件模型,还要掌握如何利用设计模式优化应用架构,以及如何通过各种API和工具处理并发、持久化、安全性等问题。对于自学J2EE,结合MLDN的J2EE框架笔记,将有助于深入理解这些概念并...

    oracle jsp相关资料

    在Oracle JSP相关资料中,"我的电子日记"可能包含了作者在学习和实践Oracle JSP过程中记录的笔记和经验分享。这些内容可能涵盖了以下几个方面: - **基础概念**:JSP的基本结构、生命周期、页面指令的使用,以及与...

    web学习资料

    【描述】:“自己以前的j2ee学习资料”表明这份压缩包中包含了作者个人在学习J2EE过程中的积累,可能包括笔记、教程、案例研究、代码示例等。这通常意味着这些资料覆盖了J2EE的基础概念、核心组件、开发工具以及实际...

    一线大厂金三银四面试资料.zip

    此外,"Java架构面试专题寒冬(含答案)和学习笔记"这部分可能会涵盖系统架构设计、分布式系统、微服务、负载均衡、容错机制、数据一致性等高级话题,对于提升面试者的技术视野和解决问题的能力大有裨益。...

    j2ee interview

    Java J2EE面试指南 Java J2EE是企业级应用开发的重要框架,广泛应用于构建分布式、...对于"Java-J2SE学习笔记",这可能是一个关于Java标准版的基础学习资料,可以帮助巩固Java基础,为理解和应用J2EE打下坚实的基础。

    IBM Wensphere application server 7.0 training pdf

    **IBM WebSphere Application Server 7.0 培训PDF** IBM WebSphere Application Server (WAS) 是IBM推出...学生笔记PDF将为学习者提供一个系统性的学习路径,确保他们能够在短时间内掌握这一强大的企业级应用服务器。

    JBoss-A.Developer's.Notebook

    5. **安全机制**:讲解 JBoss 的安全模型,包括用户认证、角色授权、SSL 安全连接以及基于 JAAS(Java Authentication and Authorization Service)的安全配置。 6. **JMS 消息服务**:阐述 JBoss 对 JMS(Java ...

    Java EE企业级应用开发教程.zip

    在Java EE企业级应用开发教程中,你将深入学习如何利用这些服务和组件来创建高效、可扩展且具有高度灵活性的应用。以下是一些主要的知识点: 1. **Web组件**:包括Servlet和JavaServer Pages (JSP)。Servlet是Java ...

    Hibernate新手上路

    13. `jaas.jar`:Java Authentication and Authorization Service,用于身份验证和授权,通常在JDK1.4及以上版本中已包含。 在`hibernate.cfg.xml`配置文件中,以下几个属性是至关重要的: 1. `...

    siad_m1_jee:TD 支持 M1SIAD Blois 20142015

    在实际学习过程中,学生可能会接触到如何配置开发环境(如使用Eclipse或IntelliJ IDEA集成开发环境)、搭建应用服务器(如Tomcat或GlassFish)、理解MVC(Model-View-Controller)设计模式、数据库交互(通过JDBC或...

Global site tag (gtag.js) - Google Analytics