1

ここなどのさまざまな場所で提供されている指示に従って、webapp で宣言型の J2EE フォームベースの認証を使用しています: http://java.dzone.com/articles/understanding-web-security

j_security_check によるログインでは、レルム内のすべてのユーザーが認証 (ログイン) できるように見えますが、ロールはチェックされません。認可チェックは、ユーザーがセキュリティ上の制約のあるページにアクセスした場合にのみ実行されるようです。

したがって、私のアプリでは、ユーザーは領域にいるため正常にログインできますが、安全なページにアクセスすると、醜い「エラー 403: AuthorizationFailed」メッセージが表示されます。

認証を特定の役割を持つユーザーに制限する方法はありますか? または、ユーザー領域に必要な役割を持つユーザーのみが含まれていることを確認する必要がありますか?

コードに関しては、web.xml に次の宣言があります。

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Simple</realm-name>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/loginerror.jsp</form-error-page>
    </form-login-config>
</login-config>

ただし、必要な役割については何も述べていないため、login.jsp に移動するすべてのユーザーは、連なりであれば正常にログインできます。

次に、ユーザーが url-pattern に一致するページのいずれかにアクセスすると、次のようになります。

<security-constraint>
    <display-name>Authorised</display-name>
    <web-resource-collection>
        <web-resource-name>Authenticated and Authorised Resources</web-resource-name>
        <url-pattern>/secure/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>simpleWebAppUser</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>INTEGRAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

それは役割がチェックされるときです。

ロール「simpleWebAppUser」はアプリケーション全体であり、ログインを成功させる前に、ユーザーがこのロールを持っていることを確認したいと思います。

Windows XP/2000/2003 で、O/S ユーザー リポジトリを使用するように構成された WebSphere 7.0 を使用しています。

4

2 に答える 2

2

役に立つと思う人のために、ここの説明に基づいて別の解決策を考え出しました: http://software-security.sans.org/blog/2010/08/11/security-misconfigurations-java-webxml-files/

以下を web.xml に追加すると:

<error-page>
    <error-code>403</error-code>
    <location>/authorizationerror.jsp</location>
</error-page>

間違ったロールを持つユーザーが保護されたページにアクセスするたびに、ページにアクセスするための十分な権限がないことを説明するページが表示されます。

アプリケーションで保護されていない唯一のページがログイン ページである場合、ログイン直後にそのページが表示されます。

于 2011-05-31T02:41:36.260 に答える
2

認証を特定の役割を持つユーザーに制限する方法はありますか?

いいえ。認証は ID を確立するプロセスであり、アクセス制御チェックを実施するプロセスではありません。これが、JAAS (したがって、Java サーブレット仕様) がこのトピックを扱う方法です。他のほとんどのシステムも同様の方法で認証を実装します。

ユーザーが特定の役割にある場合にのみ (サーブレット API は HttpServletRequest のisUserInRoleメソッドを介してこれを許可します)、「安全なページ」を表示するようにアプリケーションを変更できれば、 (アドバイスは後述)。

または、ユーザー領域に必要な役割を持つユーザーのみが含まれていることを確認する必要がありますか?

可能であれば、それを行うことができます。ただし、ユーザーが必要なロール (アプリケーション コードが認識する) にもマップされている場合にのみ、ユーザーを正常に認証する独自の JAAS LoginModule を作成することで、この問題を回避することもできます。また、このログイン モジュールを使用するには、アプリケーション サーバーと Web アプリケーションを構成する必要があります。

于 2011-05-30T02:31:56.527 に答える