0

安らかな API が用意されています。Spring MVC アノテーションを使用しました。ユーザーIDを認証し、認証時にセッションを作成し、セッションが続くまでユーザーが他のAPIを呼び出せるようにする必要があります。私の質問は: セッションの作成とそれを維持することは安らぎの考えに反しますか? はいの場合、安静な API を保護するにはどうすればよいですか? 保護しないと、ネットワーク内の誰もが URL にアクセスして応答を受け取ることができます。提案してください!

4

1 に答える 1

2

確かにあなたは正しいです、RESTはステートレスでなければなりません。つまり、セッションIDを持つCookieを保持することは原則に反します。しかし、絶望しないでください、解決策があります。

基本

スプリングセキュリティを使用していると思います。最も簡単なオプションは、RESTパスにステートレスHTTP基本認証を使用し、サイトの残りの部分でフォームログインを保持することです。これは、Spring-Securityで直接サポートされています。セキュリティ構成XMLは次のようになります。

<!-- for the REST api, the ROLE_API_CONSUMER is a custom role
     I usually use so that not all users are allowed to use the API -->
<security:http pattern="/api/**" auto-config="false" create-session="stateless">
    <security:http-basic />
    <security:intercept-url pattern="/api/**" access="ROLE_API_COSUMER" />
</security:http>
<!-- for the other MVC controllers -->
<security:http auto-config="true">
    <security:form-login />
</security:http>
<!-- usual stuff to keep track of users -->
<security:authentication-manager>
    <security:authentication-provider
        user-service-ref="userDetailsService">
        <security:password-encoder ref="encoder" />
    </security:authentication-provider>
</security:authentication-manager>

この方法では、HTTPSが真に安全である必要があり、RESTクライアントがユーザーのユーザー名とパスワードを保存する必要があるという欠点があります。クライアントがスマートフォンの場合、電話を盗むと、プレーンテキストでユーザーの資格情報にアクセスできるようになります。

OAuth

OAuth(1.0aまたは2)は、最新のAPIが使用するものであり、追加レベルのセキュリティを提供します。ユーザーの資格情報を保存する代わりに、APIにアクセスするために、RESTクライアントは最初にサーバーへのアクセス許可を要求します。簡単に言うと、サーバーはユーザーに「このクライアントがAPIにアクセスすることを承認しますか?」という通知を表示します。ユーザーが承認すると、RESTクライアントはユーザーとしての認証に使用できるトークンを取得しますが、ユーザーのパスワードなし。ユーザーの携帯電話が盗まれた場合、泥棒はそこでパスワードを見ることができず、アクセストークンが無効になる可能性があります。

spring-securityでOAuthを設定した経験はありませんが、実際にそのためのモジュールがあります。http://static.springsource.org/spring-security/oauth/を確認してください。

私はあなたを助けたことを願っています!

于 2013-02-27T09:16:43.270 に答える