4

私は Spring にあまり詳しくありませんが、いくつかの記事やハウツーを読みました。

必要な業務は次のとおりです。

  • 典型的なクライアント/サーバー アーキテクチャ: サーバー側のモバイル クライアントと RESTful サービス
  • クライアントは、モバイル アプリケーションにログインするためのさまざまな選択肢を持っています: アプリケーション ログインと facebook ログイン
  • サーバー側のすべての RESTful サービスを無許可のユーザーから保護する必要がある

私の責任は、RESTful サービスを開発することです。私はアプリケーション サーバー、Java EE、JMS、JDBC、分散トランザクション (XA) が得意ですが、セキュリティはあまり得意ではありません :(

Spring を使用して、いくつかの STATELESS RESTful Web サービスを開発しました。これらのサービスは保護されていないため、誰でも使用できます。

例えば:

  • http://...../api/country/{**user_id**}
  • http://...../api/country/{**user_id**},{country_id}
  • ...

どのユーザーがサーバー呼び出しを行ったかを識別する必要があるため、各 Web サービスにはuser_id入力パラメーターがあります。Web サービスの結果は、ユーザーによって異なります。もちろん、それは絶対に正常です。

これらの Web サービスを無許可のユーザーから保護する必要があるため、新しいものを開発する必要があります。

私の考えは:

(*) 次のような 2 つの新しい Web サービスを作成します。

applicationLogin(String username, String password)[/INDENT]facebookLogin(String accessToken)

  • http://...../api/login/{username}, {password}
  • http://...../api/login/{facebook access token}

(*) 権限のないユーザーから Web サービスを保護する必要があります

ユーザー ロギング プロセスは次のようになります。 (1) ユーザーがモバイル デバイスのユーザー名とパスワードのフィールドに入力する (2) アプリケーションのログイン ボタンをクリックする (3) モバイル アプリケーションがhttp://...../api/login/{username}, {password}パブリック サービスへのサーバー呼び出しを行う ( 4) ユーザー名とパスワードが正しい場合、トークン (有効期限情報を含む長い文字列) を生成し、ユーザー名とトークン文字列を HTTP ヘッダー (5) の応答に入れます。その後、すべてのクライアントが返送する必要があります。これら 2 つのパラメーター (ユーザー名とトークン) は、Web サービス呼び出し時にサーバーに送信されます。

サーバー側では、HTTP 要求からユーザー名を読み取ることができるため、すべての Web サービスの署名からuser_idパラメーターを削除できます。

このプロセスをSpringで実装しようとしています。Spring セキュリティ モジュールのPRE_AUTH_FILTERを使用する必要があると思います。しかし、私のアイデアが良いかどうかはわかりませんか?

やったよ:

ウェブ xml

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/api/country/*</url-pattern>
</filter-mapping>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext-security.xml, /WEB-INF/applicationContext.xml</param-value>
</context-param>

applicationContext-security.xml

<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
            xmlns:security="http://www.springframework.org/schema/security"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <security:http use-expressions="true" create-session="stateless" auto-config="false" entry-point-ref="authenticationEntryPoint">
        <security:intercept-url pattern="/api/login/*" access="permitAll"/>
        <security:intercept-url pattern="/api/country/*" access="isAuthenticated()" />
        <security:custom-filter position="PRE_AUTH_FILTER" ref="authenticationTokenProcessingFilter" />
    </security:http>

    <bean id="authenticationEntryPoint" class="com.samples.spring.auth.ForbiddenAuthenticationEntryPoint" />

    <bean id="userDetailsServiceImpl" class="com.samples.spring.auth.UserDetailsServiceImpl" />

    <bean id="preAuthenticationProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">

        <property name="preAuthenticatedUserDetailsService" ref="userDetailsServiceImpl" />
    </bean>

    <bean id="authenticationTokenProcessingFilter" class="com.samples.spring.auth.AuthenticationFilter">

        <property name="authenticationManager" ref="appControlAuthenticationManager" />
    </bean>

    <security:authentication-manager alias="appControlAuthenticationManager">
        <security:authentication-provider ref="preAuthenticationProvider" />
    </security:authentication-manager>      

</beans>

私のログインプロセスについてどう思いますか? トークン処理メソッドの実装を開始するのは良い方法ですか?

4

2 に答える 2

1

Spring セキュリティを使用する以外に、Spring にはSpring Socialという別のモジュールもあります。それは間違いなくあなたを助け、開発の労力を軽減すると思います. また、Twitter などの他のソーシャル ネットワークを使用してアプリケーションに接続することもできます。Spring Mobileもチェックしてください

于 2013-03-16T13:50:06.373 に答える
0

小さな変更を受け入れる場合は、そのままでセキュリティを使用できます。

Spring Securityは、httpセッションを使用してユーザーの詳細を保存します。また、httpsは通常、セッションキーまたはjsessionIdパラメータを含むセッションCookieによって追跡されます。

そしてもう1つのヒント:httpの代わりにhttpsを使用してください。

于 2013-03-16T13:48:10.727 に答える