1

私は、JSPでフロントエンドを持ち、REST APIを持つJARを含むWARを持っているとしましょう。同じ戦争で春のセッションオーバーライドを防ぐ

複数の認証プロバイダが設定されているspring-security.xmlがあります。

次のように私が直面してる問題は次のとおりです。

  • ユーザー(USER1)は、基本認証(ローカルホスト/ APP1)を介して、JSPフロントエンドにログインしている
  • 同じブラウザで(localhost/app2)
  • このトークンがREST呼び出し(localhost/rest)に使用されるときはいつでも、JSPトークンからのユーザー(user1)は、フロントエンド(app1)はuser2によってオーバーライドされます。

REST APIの場合、create-session="never"が有効です。しかし、JSPのセッションからのユーザーは、とにかくオーバーライドされます。

私はspring-security.xmlの3.2.9

Relevants部品春3.2.15を使用し、春のセキュリティだ:

<!-- The configuration for the rest-api --> 
<security:http pattern="/rest/**" create-session="never" use-expressions="true" 
       entry-point-ref="authenticationEntryPoint"> 
    <security:anonymous enabled="false" /> 
    <security:intercept-url pattern="/rest/**" access="permitAll" method="OPTIONS" /> 
    <security:intercept-url pattern="/rest/**" access="isAuthenticated()" /> 
    <security:custom-filter ref="CORSFilter" position="FIRST" /> 
    <security:custom-filter ref="um-rest-resource-server" before="PRE_AUTH_FILTER" /> 
</security:http> 

<!-- Other configration for the other endpoints (not under /rest/) ... --> 

<oauth2:resource-server id="um-rest-resource-server" resource-id="um-rest-resource-server" token-services-ref="tokenVerifier" /> 

<bean id="tokenVerifier" class="be.healthconnect.iam.oauth2.verifier.TokenVerifier"></bean> 

答えて

2

すべてのフロントエンドは、同じ戦争である場合、これは意図しているものです発生する。

しかし、チャンスを与える方法があります。あなたのREST app2が実際に完全にステートレスである場合は、ステートレスにcreate session strategyを設定してください:create-session="stateless"

セッション作成戦略をステートレスに設定している間に、SecurityContextHolderは有効なセッションを探すためにチェックされなくても、成功した認証を保存するために呼び出されません。

0

ブラウザは、すべてのリクエストに対してセッションCookieをサーバーに送信する必要があります。 2度目のコール(localhost/app2へ)にはセッションクッキーが含まれており、Spring Securityはこのセッションを使用してユーザを変更します。

は、いくつかの解決策がありますが、あなたはまったくのセッションを必要としない場合、あなたはcreate-session="stateless"を設定することで、要求のセッションクッキーを無視するように春のセキュリティを言うことができる、Spring Security Reference参照:

  • create- session Spring SecurityクラスがHTTPセッションを作成する意欲を制御します。オプションは次のとおりです。

    • always - Spring Securityは、セッションが存在しない場合は積極的にセッションを作成します。
    • ifRequired - Spring Securityは、必要な場合にのみセッションを作成します(デフォルト値)。
    • never - Spring Securityはセッションを作成することはありませんが、アプリケーションが行う場合はセッションを使用します。
    • stateless - Spring Securityはセッションを作成せず、Springを取得するためのセッションを無視しますAuthentication

セッションが必要な場合は、他のソリューションは、次のとおりです。セッションIDのためにログインする

  • 不許可を書き換え

    • separatブラウザセッション
    • separatのWARファイル
    • URL再び
  • 関連する問題