0

ここでRESTサービスを保護する方法について非常に素晴らしい回答を読みましたが、それらはすべて純粋な理論に過ぎず、あまり役に立ちませんでした。REST を使用する場合、JDBCRealm-FORM 認証をどのように実装しますか?

ログインフォーム

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Login Form</title>
</head>

<body>
<form method="post" action="j_security_check">
<p>You need to log in to access protected information.</p>
<table>
   <tr>
      <td>User name:</td>
      <td><input type="text" name="j_username" /></td>
   </tr>
   <tr>
      <td>Password:</td>
      <td><input type="password" name="j_password" /></td>
   </tr>
</table>
<p><input type="submit" value="Login" /></p>
</form>
</body>
</html>

web.xml

<security-constraint>
    <web-resource-collection>
        <web-resource-name>How to protect REST</web-resource-name>
        <url-pattern>/protected/*</url-pattern>----> What is that in case of rest?
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>HEAD</http-method>
        <http-method>PUT</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
        <role-name>customer</role-name>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>jdbcRealm</realm-name>

</login-config>
<security-role>
    <role-name>admin</role-name>
</security-role>
<security-role>
    <role-name>user</role-name>
</security-role>
<security-role>
    <description/>
    <role-name>customer</role-name>
</security-role>

質問:

1) Glassfish で JDBCRealm を作成しましたが、動作しています。別のjsf-appでテストしました。クライアントRESTサービスの場合、例えばそれは何ですか:<url-pattern>/protected/*</url-pattern>通常、保護されたjsp/jsf/xhtmlなどのページがある「フォルダー」を指しますが、今はどこですか?

2) セッションはどうですか? ステートレスコンテキストでセッションを使用することは不可能だと思います

3) REST で FORM ベースの認証を使用することは可能ですか?

4)私よりも賢い人がクライアントとサーバーの残りのアプリケーションを保護する方法を説明するチュートリアルへのリンク。

4

2 に答える 2

1

1) Glassfish で JDBCRealm を作成しましたが、動作しています。別のjsf-appでテストしました。clien-REST-service の場合、たとえば次のようになります: /protected/* 通常、保護された jsp/jsf/xhtml などのページがある「フォルダー」を指しますが、今はどこにあるのでしょうか?

REST サービス サブドメイン全体またはその一部を保護するように選択できます。ルートを に設定したと仮定すると/rest、それが url-pattern に入力されます。

2) セッションはどうですか? ステートレスなコンテキストでセッションを使用することは不可能だと思います

REST 実装によって異なります。JAX-RS (Jersey) の場合、答えは絶対にイエスです。HTTP セッションを使用できます。@Contextアノテーションを介してリソース クラスに注入します。

@Path("/echo")
public class EchoServiceImpl {
    @Context
    private HttpSession session;
}

セッションを使用できることを確認したので、セッションを使用しないことを強くお勧めします。RESTful 呼び出しはステートレスであるはずだからです。

3) REST で FORM ベースの認証を使用することは可能ですか?

REST にフォーム ベースの認証を使用しても意味がありません。あなたは、人間ではなく、他のコンピューター システムによって消費されるサービスを設計しています。プロセスにインタラクティブな UI が含まれないようにする必要があります。

4)私よりも賢い人がクライアントとサーバーの残りのアプリケーションを保護する方法を説明するチュートリアルへのリンク。

これは難しい問題です。多くのガイドが存在しますが、その多くは REST 実装で使用されている特定のテクノロジー スタックに固有のものです。まず、現在の構成を FORM から BASIC に変更し、エンドポイントを SSL で保護することを検討することをお勧めします。基本認証を使用する場合は、Authorization ヘッダーにユーザー資格情報を含める必要があることに注意してください。

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

ここでヘッダーを計算する方法について読むことができます

基本/ダイジェスト認証に慣れたら、OAuth などのより高度なセキュリティ オプションを検討する準備が整います。

于 2013-04-09T21:18:13.773 に答える