9 Replies Latest reply on Nov 16, 2007 11:23 PM by 702619

    总结一下:如何使用数据库作为WLS&WLP的用户验证

    702619
      作为一个统一,简单,可扩展的企业级应用平台Weblogic Platform中的一部分,Weblogic Portal被容纳在Weblogic Platform统一的安全框架中,它使用的用户和组,就是weblogic Server的用户和组,但是与Weblogic Server不同的是,它的角色是Portal特有的,与Server是完全不同意义的,需要注意不要混淆了。
      Weblogic Server安装后缺省时是使用自带的内嵌的LDAP来进行用户,组和角色的管理的,在身份验证提供者中,有一个DefaultAuthenticator,就是对这部分用户,组和角色来进行管理的提供者。
      Weblogic Portal8.13可以支持多个用户身份验证提供者,配置是在Server的控制台中进行,在Weblogic Portal的管理工具中,在管理用户和组的时候,可以在多个安全提供者之间切换,进行管理。
      在Weblogic Server控制台中,点击Security > Realms > myrealm> Authentication Providers,可以看到DefaultAuthenticator,同时,还能看到可以新建很多种类的身份验证提供者,包括:
      Configure a new Default Identity Asserter...
      Configure a new MedRec Sample Authenticator...
      Configure a new Open LDAPAuthenticator...
      Configure a new Novell Authenticator...
      Configure a new iPlanet Authenticator...
      Configure a new RDBMSAuthenticator...
      Configure a new Default Authenticator...
      Configure a new Realm Adapter Authenticator...
      Configure a new WSRPIdentity Asserter...
      Configure a new LDAPX509Identity Asserter...
      Configure a new Active Directory Authenticator...
      可以看到,Weblogic Server可以配置使用多种主流的LDAP服务器来存储用户和组,同时,也支持数据库和AD。

      点击Configure a new RDBMSAuthenticator...,输入Provider的名字,选择Control Flag, Control Flog的意义见下文。点击Apply。
      关于Control Flag的说明如下:
      REQUIRED—The Authentication provider is always called, and the user must always pass its authentication test.
      REQUISITE—If the user passes the authentication test of this Authentication provider, other providers are executed but can fail (except for Authentication providers with the JAAS Control Flag set to REQUIRED).
      SUFFICIENT—If the user passes the authentication test of the Authentication provider, no other Authentication providers are executed (except for Authentication providers with the JAAS Control Flag set to REQUIRED) because the user was sufficiently authenticated.
      OPTIONAL—TThe user is allowed to pass or fail the authentication test of this Authentication provider. However, if all Authentication providers configured in a security realm have the JAAS Control Flag set to OPTIONAL, the user must pass the authentication test of one of the configured providers.

      Details标签里面配置数据库的信息,与配置数据库连接池一样,就是用户名,密码什么的,具体不再描述。

      如果你使用了WLP带的Pointbase,那么其中用户表和group表分别为user_security和group_security,我尝试了一下,在user_security中添加一条记录,那么在控制台中是可以看到用户的。但是要注意的是,password是密文,我建议是你先在控制台创建一个用户,设置密码后,在数据库中能够看到密码的加密格式,然后在数据库添加其他用户时,使用该密文,至少可以保证你的用户密码是知道的。
      如果,密码要不同,可以尝试使用如下代码加密密码:
      import java.security.MessageDigest;
      import weblogic.utils.encoders.BASE64Encoder;
      ......
      private String encodePassword(String password)
      {
      MessageDigest messageDigest=MessageDigest.getInstance("MD5");
      BASE64Encoder encoder=new BASE64Encoder();
      return encoder.encodeBuffer(messageDigest.digest(password.getBytes()));
      }
      (以上代码试验过,正确)

      使用数据库认证,需要创建一些组的,你最好在数据库表中,按照Weblogic缺省带有的那些组,建立一些组,因为,WLS的Role有些是根据组配置的,特别是WLS的管理员。
      当然你也可以保留原有的WLS基于LDAP的认证,应用的用户再使用RDBMS,就是两个验证提供者并存,但是要注意的是,需要设置你添加的验证提供者和DefaultAuthenticator的Control Flag为SUFFICIENT或者REQUISITE。(我试验时都设置的SUFFICIENT)

      以上注意的是,我是在Portal Domain中,数据库使用point base试验成功的,数据库中缺省已经带有了表,在Weblogic Server Domain中尝试失败,由于时间关系,没有查找原因。
      缺省时RDBMS认证需要的表文件和相关文件,可以见BEA_HOME\weblogic81\portal\db\下各种数据库目录下p13n_xxx_xxx.sql。

      希望能对你有所帮助。

      相关链接:
      http://e-docs.bea.com/wls/docs81/ConsoleHelp/security_7x.html#1175366
      http://e-docs.bea.com/wls/docs81/ConsoleHelp/domain_rdbmsrealm_config_database.html