`
JBossWeek
  • 浏览: 78149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JBoss4 应用服务器Web开发人员参考手册(5):使用DIGEST认证

阅读更多

当使用BASIC和FORM认证方式时,用户密码以明文的形式作为HTTP请求的一部分发送。正如在上一部分描述的,我们可以使用HTTPS来加密整个会话过程, 从而能够确保密码在传输过程中的私密性. 但是,这种方式仍然需要密码以明文的形式存在服务器上, 至少当密码从存储加载到内存时,密码会暂时性的以明文形式存在。.

Digest 认证方式采用挑战-应答机制,在这种机制里,服务器发送一个唯一的挑战给客户,客户通过发送hashed值作为响应,服务器将接收到的Hash值和自身的Hash值进行比较来实现认证。在整个过程中,客户并没有将实际的密码文本发送到服务器。

在Web应用中,digest认证方式的使用需要设置将web.xml描述文件中的 auth-method 设置为 DIGEST. 下面给出了一个可能的例子,但是省略了应用特定的specific security-constraint 和 security-role 声明.

  
<login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>My Aplication</realm-name>
</login-config>

为了digest完成配置, 还需要创建一个特定的digest友好的安全域,并把它连接到应用. 例如, 我们将创建一个名为java:/jaas/digest的安全域. 应用通过 jboss-web.xml 文件连接到安全域.

  
<jboss-web>
    <security-domain>java:/jaas/digest</security-domain>
</jboss-web>        

现在还需要创建安全域的定义. 在这个例子里,我们将使用UsersRolesLoginModule , 当然也可以使用其它支持password hash登录模块. 下面给出一个完整配置的例子.

<application-policy name="digest"><o:p></o:p>
    <authentication><o:p></o:p>
        <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"<o:p></o:p>
                      flag="required"><o:p></o:p>
            <module-option name="usersProperties">digest-users.properties</module-option><o:p></o:p>
            <module-option name="rolesProperties">digest-roles.properties</module-option><o:p></o:p>
            <module-option name="hashAlgorithm">MD5</module-option><o:p></o:p>
            <module-option name="hashEncoding">rfc2617</module-option><o:p></o:p>
            <module-option name="hashUserPassword">false</module-option><o:p></o:p>
            <module-option name="hashStorePassword">true</module-option><o:p></o:p>
            <module-option name="passwordIsA1Hash">true</module-option><o:p></o:p>
            <module-option name="storeDigestCallback"><o:p></o:p>
                org.jboss.security.auth.spi.RFC2617Digest<o:p></o:p>
            </module-option><o:p></o:p>
        </login-module><o:p></o:p>
    </authentication><o:p></o:p>
</application-policy><o:p></o:p>
最前面的两个模块选项设置了user 和 roles 属性文件的位置. 与剩下的其他六个选项一起构成了digest认证的完整配置. 为了在web应用中启用digest认证,需要将剩下的 6 个选项拷贝到web应用的登录模块配置中。.

到了这里,剩下的工作就是创建password hashes,并把它保存到你的存储中;在这个例子里,存储就是digest-users.properties 文件. Digest hashes是 username,  password, 和  realm 名称一起的hash. realm名称来自 web.xml 文件中的realm名称. 在这个例子realm名称是 My Application.

JBoss提供了一个辅助类来创建 digest hashes. 它可以在bin目录通过如下的命令使用:

[bin]$ java -cp ../server/default/lib/jbosssx.jar \org.jboss.security.auth.spi.RFC2617Digest username "My Application" passwordRFC2617 A1 hash: 9b47ec6f03603dd49863e7d58c4c49ea

三个参数是 username, realm 名称和 password. digested 密码应该保存到用户管理的存储中。在这里,应该保存到 digest-users.properties 文件中.

user=9b47ec6f03603dd49863e7d58c4c49ea

为了完成整个安全配置,你可能还需要定义应用的角色,并把它配置到登录模块中。但是这些与digest认证没有关系。.

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics