WebService系列:OC4J安全性提供程序
二月 10, 2009 in Oracle 融合中间件
上面的章节中我们添加了WS安全认证之后执行Web Service报出:wsse:FailedAuthentication的错误,这是由于验证失败的缘故。
为了验证Web Services的安全信息,需要在OC4J服务器端对Web Services所属的Web应用设置安全验证方式,OC4J提供了四种安全验证的方式:
- 基于文件的安全提供程序
- Oracle Identity Management安全提供程序
- 用于第三方LDAP服务器的Oracle安全提供程序
- 定制的安全提供程序
本文基于本人实际使用过的1,4两种安全提供程序方式的描述
一、基于文件的安全提供验证
本节采用OC4J默认的“基于文件的安全提供程序”来进行Web Services安全验证,设置步骤如下:
- 登录OC4J EM管理页面
- 选择“应用程序”标签页中的应用“aronehome”
- 选择“应用程序:aronehome”下的标签页“管理”页中的“安全提供程序”任务,选择“转到任务”链接图标
- 进入安全提供程序设置界面,选择“领域”标签
- 选择角色的数字链接进入角色定义和查询界面
- 选择用户的数字链接进入用户定义和查询界面
根据验证的需要创建不同的用户信息,如本示例创建用户:aronehome/aronehome。
只要是在这里创建的用户信息都可以用来验证本应用下的安全Web Services,在调用启用了安全验证的Web Service时,
如果调用程序没有提供用来验证的用户信息或者是提供了上面未定义的被认为错误的验证信息,则不会调用Web Services。
设置好用户信息之后,再次运行Web Service进行测试!
二、定制的安全提供程序
基于文件的安全性认证对于在实际的应用中很难满足灵活的用户管理,因此本文描述如何使用定制类型的安全提供程序来通过编写PLSQL程序从数据库表sec_users中验证用户。
下面使用OTN提供的DatabaseLoginModule来, 相关的Jar从OTN下载:http://www.oracle.com/technology/products/jdev/howtos/10g/jaassec/jaasdatabaseloginmodule.zip
1,配置JAR环境
- 拷贝DBLoginModule.jar文件包到$ORACLE_HOME/j2ee/home/lib目录下
- 修改文件$ORACLE_HOME/j2ee/home/config/application.xml,添加内容:
<library path=”../../home/lib/DBLoginModule.jar”/> - 重启OC4J
2,创建用户信息表
1 2 3 4 5 6 7 8 | CREATE TABLE sec_users( userid NUMBER, username VARCHAR2(30), PASSWORD VARCHAR2(30) ); INSERT INTO sec_users VALUES(1,'aronehome','aronehome'); COMMIT; |
3,编写用户验证的PLSQL过程
下面是一个例子,实际的验证请根据数据库表进行必要的修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | CREATE OR REPLACE PACKAGE aronehome_jaas_utils IS TYPE principal_ref IS REF CURSOR; FUNCTION get_user_authentication(p_username IN VARCHAR2, p_password IN VARCHAR2, p_realm VARCHAR2) RETURN principal_ref; END aronehome_jaas_utils; / CREATE OR REPLACE PACKAGE BODY aronehome_jaas_utils IS FUNCTION get_user_authentication(p_username IN VARCHAR2, p_password IN VARCHAR2, p_realm VARCHAR2) RETURN principal_ref AS var_username VARCHAR2(100); var_userid NUMBER(10); var_password VARCHAR2(100); role_cursor principal_ref; failed_authentication EXCEPTION; BEGIN SELECT userid, username, password INTO var_userid, var_username, var_password FROM sec_users WHERE username = p_username; IF (var_password = p_password) THEN BEGIN -- Manager,Administrator,User OPEN role_cursor FOR SELECT 'User' FROM dual ; END; -- if password doesn't match, raise Excpetion for LM to -- abort the authentication process ELSE RAISE failed_authentication; END IF; RETURN role_cursor; END get_user_authentication; END aronehome_jaas_utils; / |
4,设置数据库存贮信息来验证
- 登录OC4J EM管理界面
- 选择需要设置的Web应用,如:aronehome
- 切换到应用对应的管理页面,选择“安全提供程序”
- 选择“更改安全提供程序”按钮来更改设置,设置如下的属性:
安全提供程序类型:定制安全提供程序
JAAS 登录模块类: oracle.sample.dbloginmodule.DBProcLM.DBProcLoginModule - 设置登录模块的属性如下:
Name:jdbcDriver ;Value:oracle.jdbc.driver.OracleDriver
Name:plsql_procedure ;Value:ARONEHOME_JAAS_UTILS.GET_USER_AUTHENTICATION
Name:db_schema;Value:aronehome
Name:db_schema_pw;Value:aronehome
Name:jdbcUrl;Value:jdbc:oracle:thin:@localhost:1521:xe
Name:debug;Value:false
Name:log_level;Value:ALL
设置好上面的配置之后,需要从新启动aronehome应用,再次运行Web Service进行测试!
注:DatabaseLoginModule的使用请查看OTN的相关文章,Declarative J2EE authentication and authorization with JAAS,上面只是其中一种用法。
最终的JDeveloper10 Workspace项目文件:
–