2013-07-18 23 views
5

私は、ユーザー名とパスワードで保護する必要のある非常に単純なJavaアプリケーションを開発中です。認証にはActive Directoryを使用する必要があります。認証されたユーザーにのみアクセスを許可することができます。ユーザーが何を見るかどうかを判断するためにグループ/ロールのチェックは必要ありません。私はアプリケーションを実行するためにJETTYを使用しています。Jetty - JAASとActive Directory - 認証のみ?

私はかなり長い間、JettyでLDAPログインモジュールを実装しようとしてきました。しかし、私はログインフォームを送信するたびに、私は "!ロール"メッセージで403エラーが発生します。

HTTP ERROR 403 

Problem accessing /JAAS/. Reason: 

    !role 

桟橋標準出力Iは、ログインフォーム提出:私は、ログインフォーム(私がログに表示され入力されたユーザ名を、提出するので、認証の一部はそうするとき

​​

桟橋ログファイルを)で動作します:セキュリティ制約とセキュリティrokeが宣言されているのweb.xmlの

0:0:0:0:0:0:0:1 - - [18/Jul/2013:17:28:38 +0000] "GET /JAAS/ HTTP/1.1" 302 0 
0:0:0:0:0:0:0:1 - - [18/Jul/2013:17:28:38 +0000] "GET /JAAS/login.html HTTP/1.1" 304 0 
0:0:0:0:0:0:0:1 - - [18/Jul/2013:17:28:47 +0000] "POST /JAAS/j_security_check HTTP/1.1" 302 0 
0:0:0:0:0:0:0:1 - username [18/Jul/2013:17:28:47 +0000] "GET /JAAS/ HTTP/1.1" 403 1362 

エキス:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Entire Application</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 

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

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

    <security-role> 
     <role-name>Domain Users</role-name> 
    </security-role> 

    <security-role> 
     <role-name>MyLocalGroup</role-name> 
    </security-role> 

LDAPログインモジュールの設定ファイル(ldaploginmodule.conf):

myloginmodule { 
    org.eclipse.jetty.plus.jaas.spi.LdapLoginModule required 
    debug="true" 
    debugNative="true" 
    contextFactory="com.sun.jndi.ldap.LdapCtxFactory" 
    hostname="ldapserver" 
    port="389" 
    bindDn="CN=Administrator,CN=Users,DC=mydomain,DC=test,DC=local" 
    bindPassword="secret" 
    directGroupExtraction="true" 
    userGroupAttribute="cn" 
    allRolesMode="authOnly" 
    userFilter="(objectClass=organizationalPerson)" 
    authenticationMethod="simple" 
    forceBindingLogin="true" 
    userBaseDn="DC=mydomain,DC=test,DC=local" 
    userRdnAttribute="cn" 
    userIdAttribute="sAMAccountName" 
    userPasswordAttribute="unicodePwd" 
    userObjectClass="user" 
    roleSearch="(member={0})" 
    roleName="cn" 
    roleSubtree="true" 
    roleBaseDn="CN=Users,DC=mydomain,DC=test,DC=local"; 
    }; 

桟橋レルムの設定(私の-jaas.xml):

<Configure id="Server" class="org.eclipse.jetty.server.Server"> 

    <!-- JAAS TEST --> 
    <Call name="addBean"> 
     <Arg> 
      <New class="org.eclipse.jetty.plus.jaas.JAASLoginService"> 
      <Set name="Name">Test JAAS Realm</Set> 
      <Set name="LoginModuleName">myloginmodule</Set> 

      <Set name="roleClassNames"> 
       <Array type="java.lang.String"> 
        <Item>org.eclipse.jetty.plus.jaas.JAASRole</Item> 
       </Array> 
      </Set> 

      </New> 
     </Arg> 
    </Call> 

</Configure> 

最後に、桟橋の起動コマンド:

java -Xdebug -Djava.naming.referral=follow -Djava.security.auth.login.config=etc/ldaploginmodule.conf -jar start.jar etc/my-jaas.xml 

Windowsセキュリティイベントログを確認しましたが、ログオンの監査エントリが正常に表示されていますr私がログインフォームで提供したユーザー

事は、私は何もする必要はありません。私は、認証を実行し、認証されたすべてのユーザーがアプリケーションにアクセスできるようにしたいだけです。

どのように私は認証だけを持ち、役割を避けることができますか?私はLdapLoginModuleクラスをオーバーライドし、web.xmlで宣言する「ダミー」ロールを強制することを考えていました。しかし、これが正しいかどうかは分かりません。

答えて

0

認証が成功しました。

認証されたすべてのユーザーがすべてにアクセスできるようにするには、実行中のURLパターン/ *を保護する必要があります。 RegExpAuthorizationFilter(https://wiki.apache.org/solr/SolrSecurityを参照)を使用できます。今、彼らはこのクラスを正規分布に含めません。私はここにコードを見つけました(https://issues.apache.org/jira/secure/attachment/12572819/SOLR-4470_branch_4x_r1454444.patch)、それは簡単にコンパイルされました。

フィルタを設定するときは、任意の役割(存在しない、/ abcdeのような)のURLパターンを任意のロールで指定します。それが動作する方法は、要求されているURLがこのパターンと一致するかどうかを確認することです。それがないので、それは前進する。しかしルールはなく、アクセスも許可されています。

したがって、すべてのURLの認証が必要ですが、有効なすべてのURLには認証が成功した後でアクセスできます。

私の設定は、Jettyで実行されているsolrのコンテキストで行われました。しかし、私の設定はweb.xmlなどの標準的なものと結びついていると思います。

0

あなたがここに示されているように**特別な役割を使用するのweb.xmlを変更する必要があります:Authorization section for Jetty Authentication

かかわらず役割の、認証されたすべてのユーザーに付与されたアクセス。これは、そう、これは私のセキュリティ制約は次のようになります

>

<セキュリティ制約で<のauth-制約>の<役割名>のための「**」の特別な値で示されています:

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>Secured Solr Admin User Interface</web-resource-name> 
    <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>**</role-name> 
    </auth-constraint> 
</security-constraint> 
関連する問題