2017-03-24 5 views
-1

イントロ:春の両方のフォーム・ログインのためのSecuityと休息トークン認証

Iそれがフォーム・ログインを使用していますLoginUrlAuthenticationEntryPointを使用する既存のWebアプリケーションを持っています。これは正常に動作しています。

ここで、REST/jsonを介して外部サイトにアクセスできるようにするために、リンクの一部が必要でした。私は@RestControllerで注釈を付けられたコントローラを実装しており、それは実行中です。

問題:今

、私はRESTの一部にセキュリティを追加したいです。 Webアプリケーションで2つの認証:フォームログイン(Web)とトークンベース(REST)を受け入れるようにします。

  1. ウェブ
  2. [既存およびOK]ログインフォームからユーザー/パスワードを受け入れるREST(JSON) 私は、HTTPのような送信を考えています:/ localhostを:8080/myappの入手トークン& UN =ユーザー& PWを? = passwordそれが正常に認証されると、それはトークンを返します。それ以外の場合は、エラーメッセージが返されます。 返されたトークンを使用して、サーバーへの要求にアクセスします。

現在のSpring Webセキュリティに影響を与えることなく、トークンを使用してRESTセキュリティを追加する必要がありました。

のApp-コンテキストXML:

... 
<security:http use-expressions="true" create-session="always" entry-point-ref="loginUrlAuthenticationEntryPoint"> 
     <!-- Intercept URLs here --> 
     <security:custom-filter ref="myAppUsernamePasswordAuthenticationFilter" position="FORM_LOGIN_FILTER" /> 
     <security:logout logout-success-url="/" delete-cookies="JSESSIONID" invalidate-session="true" /> 
     <security:session-management session-authentication-error-url="/?error=alreadyLoggedIn"> 
      <security:concurrency-control max-sessions="1" expired-url="/sessionExpired" error-if-maximum-exceeded="true" /> 
     </security:session-management> 
    </security:http> 

    <security:authentication-manager alias="authenticationManager"> 
     <security:authentication-provider ref='myAppAuthenticationProvider' /> 
    </security:authentication-manager> 

    <bean id="myAppAuthenticationProvider" class="com.myapp.security.MyAppAuthenticationProvider" /> 
    <bean id="myAppUsernamePasswordAuthenticationFilter" class="com.myapp.security.MyAppUsernamePasswordAuthenticationFilter"> 
     <property name="authenticationManager" ref="authenticationManager" /> 
     <property name="authenticationSuccessHandler" ref="myAppAuthenticationSuccessHandler"> 
     </property> 
     <property name="authenticationFailureHandler" ref="myAppAuthenticationFailureHandler" /> 
    </bean> 

    <bean id="myAppAuthenticationSuccessHandler" class="com.myapp.security.MyAppAuthenticationSuccessHandler" /> 
    <bean id="myAppAuthenticationFailureHandler" class="com.myapp.security.MyAppAuthenticationFailureHandler" /> 
    <bean id="loginUrlAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> 
     <property name="loginFormUrl" value="/" /> 
     <property name="forceHttps" value="false" /> 
    </bean> 

私はRESTの一部のトークンベースのセキュリティのために何を追加する必要がありますか?

ありがとうございます!

答えて

0

このケースでは、Spring OAuthセキュリティを使用することを強くお勧めします。したがって、その場合は、クライアント& oauthサーバーの2つのアプリケーションがあります。クライアントアプリケーションはユーザーからのユーザー名&を取得し、それをoauthサーバーに転送します。 Oauthサーバーはユーザーの詳細を検証し、成功した場合はトークンをクライアントアプリケーションに返します。クライアントアプリケーションはそれ以降の操作に使用されます。

この場合、外部サイト/アプリケーションへのアクセスを許可するには、Client-Credentialフローを実装する必要があります。これにより、まずクライアントアプリケーションが認証され、残りのコントローラURL。

このリンクを確認してください:http://websystique.com/spring-security/secure-spring-rest-api-using-oauth2/

関連する問題