4

WildFly 9 サーバーで実行されている Web アプリケーションを保護したいと考えています。

2 つのテーブルusers(login, password)roles(login, role).

まず、次のように BASIC 認証を構成しました。

スタンドアロン.xml:

<security-domain name="mydomain" cache-type="default">
    <authentication>
      <login-module code="Database" flag="required">                      
         <module-option name="dsJndiName" value="java:jboss/datasources/myDS"/> 
         <module-option name="principalsQuery" value="select password from users where login=?"/> 
         <module-option name="rolesQuery" value="select role, 'Roles' from roles where login=?"/> 
      </login-module>
    </authentication>
</security-domain>

web.xml:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>name</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

<security-role>
    <role-name>*</role-name>
</security-role>

jboss-web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <security-domain>java:/jaas/mydomain</security-domain>
</jboss-web>

これは正常に機能しますが、パスワードがネットワーク経由で平文で送信され、同じようにデータベースに保存されるため、悪い習慣です。だから私はこれを行う DIGEST の BASIC を変更しようとしました:

standalone.xml: いくつかのオプション モジュールを追加しました

<security-domain name="mydomain" cache-type="default">
    <authentication>
        <login-module code="Database" flag="required">
            <module-option name="dsJndiName" value="java:jboss/datasources/myDS"/> 
            <module-option name="principalsQuery" value="select password from users where login=?"/> 
            <module-option name="rolesQuery" value="select role, 'Roles' from roles where login=?"/> 
            <module-option name="hashAlgorithm" value="MD5"/> 
            <module-option name="hashEncoding" value="RFC2617"/> 
            <module-option name="hashUserPassword" value="false"/> 
        </login-module>
    </authentication>
</security-domain>

web.xml: login-config セクションを変更しました

<login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>MyRealm</realm-name>
</login-config>

しかし、私はこのエラーがあります:

LoginModule Class: org.jboss.security.auth.spi.DatabaseServerLoginModule
ControlFlag: LoginModuleControlFlag: required
Options:
name=dsJndiName, value=java:jboss/datasources/proxysnmpDS
name=principalsQuery, value=select passwd from LOGIN where login=?
name=hashUserPassword, value=false
name=rolesQuery, value=select role, 'Roles' from USER_ROLES where login=?
name=hashEncoding, value=RFC2617
name=hashAlgorithm, value=MD5

15:03:06,676 TRACE [org.jboss.security 137] (default task-2) PBOX00236: Begin initialize method
15:03:06,676 DEBUG [org.jboss.security 154] (default task-2) PBOX00281: Password hashing activated, algorithm: MD5, encoding: RFC2617, charset: null, callback: null, storeCallBack: null
15:03:06,676 TRACE [org.jboss.security 133] (default task-2) PBOX00262: Module options [dsJndiName: java:jboss/datasources/proxysnmpDS, principalsQuery: select passwd from LOGIN where login=?, rolesQuery: select role, 'Roles' from USER_ROLES where login=?, suspendResume: true]
15:03:06,676 TRACE [org.jboss.security 186] (default task-2) PBOX00240: Begin login method
15:03:06,682 TRACE [org.jboss.security 182] (default task-2) PBOX00263: Executing query select passwd from LOGIN where login=? with username admin
15:03:06,693 DEBUG [org.jboss.security 287] (default task-2) PBOX00283: Bad password for username admin
15:03:06,694 TRACE [org.jboss.security 269] (default task-2) PBOX00244: Begin abort method, overall result: false
15:03:06,694 DEBUG [org.jboss.security 368] (default task-2) PBOX00206: Login failure: javax.security.auth.login.FailedLoginException: PBOX00070: Password invalid/Password required
    at org.jboss.security.auth.spi.UsernamePasswordLoginModule.login(UsernamePasswordLoginModule.java:286) [picketbox-4.9.2.Final.jar:4.9.2.Final]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_60]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_60]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_60]
...

これは、webapp ログイン システムから受け取ったハッシュ化されたパスワードと、データベース内のハッシュ化されたパスワードが一致しないためだと思います。データベース内のハッシュ化されたパスワードは の MD5 ですlogin:realm:password

誰かが何が悪いのか教えてもらえますか?

4

0 に答える 0