JAAS:java授权与认证服务
2011-01-22 13:18
393 查看
一.
什么是
JAAS
?
JAAS
(
Java Authentication and Authorization Service
)是一个在
java
中验证用户和给用户授权的可移植性接口。
开发者可以通过两种不同应用场景使用到
JAAS
:
1.
java
单独连接到远程
EJB
系统时
2.
当客户通过
WEB
浏览器连接到
Servlet
或
jsp
时,
WEB
浏览器用户需要提供凭证给
Servlet
或
jsp
层。随后,
Servlet
或
jsp
层能够借助
JAAS
完成用户的认证操作。
为系统增加安全性时,客户端需要通过两个安全措施:
1.
首先,客户端必须通过验证。验证过程合适客户身份。一旦通过验证,在接下来的
会话过程中,这个用户就与一个安全身份相联系。
2.
客户端必须经过授权。客户一旦通过验证,它还必须具有执行相应操作的权限。
二
.
在
WEB
应用中应用
JAAS(以JBOSS服务器环境为例)
WEB
浏览器可以使用多种方法提供身份证明,例如:基本验证,基于表单的验证,摘要验证,正数验证等。这里介绍的是基本验证,即
WEB
客户端想服务器提供一个用户名和密码,这个服务器通过检查存储在永久性数据库中的用户名和密码来验证这些证明身份的信息。
1.
在
WEB
应用中的
web.xml
中声明角色,例如:
<security-role>
<role-name>manager</role-name>
</security-role>
<security-role>
<role-name>user</role-name>
</security-role>
2.
为以声明的角色邦定资源,例如,
manager
可以访问/
WEB-ROOT/manager
目录下的资源,而
manager
和
user
都可以访问
/WEB-ROOT/public
目录下的资源:
<security-constraint>
<web-resource-collection>
<web-resource-name>publicResource</web-resource-name>
<url-pattern>/public/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>mamager</role-name>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>managerResource</web-resource-name>
<url-pattern>/manage/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
</auth-constraint>
</security-constraint>
3
.为了收集
WEB
客户端的登录信息,需要在
web.xml
中配置信息输入框,例如:
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
这样就会由浏览器自动弹出登录对话框。
4.
定制用户信息。
A.
如果用户很少,可以将用户信息保存在属性文件中:
users.properties
文件内容:
guest=password
admin=password
Roles.properties
文件内容:
guest=user
admin=manager
注意:两个文件的名字是固定的。
B.
如果用户很多,就需要将用户信息保存到数据库中:
在
%JBOSS_HOME%/server/default/conf/login-config.xml
文件中添加域:
<application-policy
name = "mydomain">
<authentication>
<login-module code =
"org.jboss.security.auth.spi.DatabaseServerLoginModule"
flag = "required">
<module-option name =
"unauthenticatedIdentity">guest</module-option>
<module-option
name =
"dsJndiName">java:/MySqlDS</module-option>
<module-option name =
"principalsQuery">SELECT PASSWD FROM
USERS WHERE USERID=?</module-option>
<module-option name = "rolesQuery">SELECT ROLEID,
'Roles' FROM
ROLES WHERE USERID=?</module-option>
</login-module>
</authentication>
</application-policy>
注意:其中的数据源名字,表名以及字段名根据情况配置。当然这些表是需要事先建好的。
5.
如果
4
中使用的是
B
方法,则还需要添加配置文件来通知服务器要使用自定义的域。
在
WEB-INF
目录下添加
jboss-web.xml
文件,内容如下:
<?xml
version="1.0" encoding="UTF-8"?>
<!DOCTYPE
jboss-web PUBLIC "-//JBoss//DTD Web Application 2.4//EN"
"jboss-web_4_0.dtd" >
<jboss-web>
<security-domain>java:jaas/mydomain</security-domain>
</jboss-web>
这里的
mydomain
就是第四步中添加的域。
三
.
在桌面客户端中应用
JAAS
1
服务器端:
对于非
WEB
项目,所谓的资源就是方法,因此授权与认证也是针对方法来说。
对类使用
@DeclareRoles
标注来声明角色,如:
@DeclareRoles({"leader","member"})
声明了两个角色
对方法授权,使用
@RolesAllowed
,例如:
@RolesAllowed({"leader"})
使
lerder
角色对某个方法具有操作权限
如果某个方法对所有角色都是开放的,可以使用
@PermitAll
标注。
注意:由于服务是由服务器提供实现的,例如
jboss
,所以要对一个类使用
认证与授权服务,必须让服务器的容器来管理它们,应该用
@Stateless
来标注。
2
客户端
在
WEB
环境中,因为有
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
这样的配置,浏览器会自动弹出登录对话框,从而来收集客户端的登录信息。那么
在普通的客户端程序用该如何向服务端发送登录信息呢?
可以使用
SecurityAssociation
的连个静态方法:
SecurityAssociation.setPrincipal(new
SimplePrincipal("hr"))
:设置登录用户名
SecurityAssociation.setCredential("hr")
:设置登录密码
3
认证信息的配置与
WEB
项目中一样(这些是与具体服务器相关的,而非项目)
四.关于可移植性
授权配置是可移植的,因为它是标准
WEB
项目的一部分(在
web.xml
文件中配置)
也就是说,一个项目从一个服务器(例如
JBOSS
)转移到另一个服务器(例如
Weblogic
)
中时,授权配置不用做任何更改。
认证信息就不可以了。认证信息是与服务器相关的,各种服务器的认证信息配置
是不一样的。但是,这些配置都是大同小异。因此,项目移植时,只需要根据服务器
使用文档来修改相关配置即可。
什么是
JAAS
?
JAAS
(
Java Authentication and Authorization Service
)是一个在
java
中验证用户和给用户授权的可移植性接口。
开发者可以通过两种不同应用场景使用到
JAAS
:
1.
java
单独连接到远程
EJB
系统时
2.
当客户通过
WEB
浏览器连接到
Servlet
或
jsp
时,
WEB
浏览器用户需要提供凭证给
Servlet
或
jsp
层。随后,
Servlet
或
jsp
层能够借助
JAAS
完成用户的认证操作。
为系统增加安全性时,客户端需要通过两个安全措施:
1.
首先,客户端必须通过验证。验证过程合适客户身份。一旦通过验证,在接下来的
会话过程中,这个用户就与一个安全身份相联系。
2.
客户端必须经过授权。客户一旦通过验证,它还必须具有执行相应操作的权限。
二
.
在
WEB
应用中应用
JAAS(以JBOSS服务器环境为例)
WEB
浏览器可以使用多种方法提供身份证明,例如:基本验证,基于表单的验证,摘要验证,正数验证等。这里介绍的是基本验证,即
WEB
客户端想服务器提供一个用户名和密码,这个服务器通过检查存储在永久性数据库中的用户名和密码来验证这些证明身份的信息。
1.
在
WEB
应用中的
web.xml
中声明角色,例如:
<security-role>
<role-name>manager</role-name>
</security-role>
<security-role>
<role-name>user</role-name>
</security-role>
2.
为以声明的角色邦定资源,例如,
manager
可以访问/
WEB-ROOT/manager
目录下的资源,而
manager
和
user
都可以访问
/WEB-ROOT/public
目录下的资源:
<security-constraint>
<web-resource-collection>
<web-resource-name>publicResource</web-resource-name>
<url-pattern>/public/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>mamager</role-name>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>managerResource</web-resource-name>
<url-pattern>/manage/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
</auth-constraint>
</security-constraint>
3
.为了收集
WEB
客户端的登录信息,需要在
web.xml
中配置信息输入框,例如:
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
这样就会由浏览器自动弹出登录对话框。
4.
定制用户信息。
A.
如果用户很少,可以将用户信息保存在属性文件中:
users.properties
文件内容:
guest=password
admin=password
Roles.properties
文件内容:
guest=user
admin=manager
注意:两个文件的名字是固定的。
B.
如果用户很多,就需要将用户信息保存到数据库中:
在
%JBOSS_HOME%/server/default/conf/login-config.xml
文件中添加域:
<application-policy
name = "mydomain">
<authentication>
<login-module code =
"org.jboss.security.auth.spi.DatabaseServerLoginModule"
flag = "required">
<module-option name =
"unauthenticatedIdentity">guest</module-option>
<module-option
name =
"dsJndiName">java:/MySqlDS</module-option>
<module-option name =
"principalsQuery">SELECT PASSWD FROM
USERS WHERE USERID=?</module-option>
<module-option name = "rolesQuery">SELECT ROLEID,
'Roles' FROM
ROLES WHERE USERID=?</module-option>
</login-module>
</authentication>
</application-policy>
注意:其中的数据源名字,表名以及字段名根据情况配置。当然这些表是需要事先建好的。
5.
如果
4
中使用的是
B
方法,则还需要添加配置文件来通知服务器要使用自定义的域。
在
WEB-INF
目录下添加
jboss-web.xml
文件,内容如下:
<?xml
version="1.0" encoding="UTF-8"?>
<!DOCTYPE
jboss-web PUBLIC "-//JBoss//DTD Web Application 2.4//EN"
"jboss-web_4_0.dtd" >
<jboss-web>
<security-domain>java:jaas/mydomain</security-domain>
</jboss-web>
这里的
mydomain
就是第四步中添加的域。
三
.
在桌面客户端中应用
JAAS
1
服务器端:
对于非
WEB
项目,所谓的资源就是方法,因此授权与认证也是针对方法来说。
对类使用
@DeclareRoles
标注来声明角色,如:
@DeclareRoles({"leader","member"})
声明了两个角色
对方法授权,使用
@RolesAllowed
,例如:
@RolesAllowed({"leader"})
使
lerder
角色对某个方法具有操作权限
如果某个方法对所有角色都是开放的,可以使用
@PermitAll
标注。
注意:由于服务是由服务器提供实现的,例如
jboss
,所以要对一个类使用
认证与授权服务,必须让服务器的容器来管理它们,应该用
@Stateless
来标注。
2
客户端
在
WEB
环境中,因为有
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
这样的配置,浏览器会自动弹出登录对话框,从而来收集客户端的登录信息。那么
在普通的客户端程序用该如何向服务端发送登录信息呢?
可以使用
SecurityAssociation
的连个静态方法:
SecurityAssociation.setPrincipal(new
SimplePrincipal("hr"))
:设置登录用户名
SecurityAssociation.setCredential("hr")
:设置登录密码
3
认证信息的配置与
WEB
项目中一样(这些是与具体服务器相关的,而非项目)
四.关于可移植性
授权配置是可移植的,因为它是标准
WEB
项目的一部分(在
web.xml
文件中配置)
也就是说,一个项目从一个服务器(例如
JBOSS
)转移到另一个服务器(例如
Weblogic
)
中时,授权配置不用做任何更改。
认证信息就不可以了。认证信息是与服务器相关的,各种服务器的认证信息配置
是不一样的。但是,这些配置都是大同小异。因此,项目移植时,只需要根据服务器
使用文档来修改相关配置即可。
相关文章推荐
- 使用 Java 认证和授权服务(JAAS)来定制应用程序登录
- java安全 ——JAAS(Java 认证和授权服务)开发指南
- 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序
- JBOSS中使用Java验证和授权服务jaas(转载)
- 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序
- Java认证和授权服务 JAAS 之 认证
- Jboss+EJB3下使用JAVA验证和授权服务(JAAS)
- Oauth2认证授权服务(django-oauth-toolkit)搭建及操作流程
- Java Web系列:JAAS认证和授权基础
- Java权限管理(授权与认证)
- spring cloud+.net core搭建微服务架构:Api授权认证(六)
- OAuth 2.0 构建微服务身份认证(二):java实现过程
- 让 CAS 5.1.8 支持http,解决未认证授权服务错误提示问题
- 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心
- Java安全之认证与授权
- Java权限管理(授权与认证)
- 微信的接口网页授权获取用户基本信息不是只有认证服务号才有
- JAAS (Java认证和授权服务)
- 权限服务、云平台、认证授权项目之间的关系
- 使用Handler来增强Web服务的功能(生成日志、用户认证、用户授权、信息加密/解密)