2016-04-05 16 views
2

私は、スタンドアロンのOAuth2認証サーバとクライアントアプリケーション(Webベース)を持っています。すべてがSpring OAuth2を使用しています。クライアント、認証サーバ、ログアウト

私は、(ログインフォームを介して)Springの設定を使用して、クライアントアプリケーションからリダイレクトなどの認証サーバーにログインフォームのホストを持っています。

これまでのところすべて良いです。すべての罰金であることを「らしい」ということ

.and() 
    .logout() 
    .addLogoutHandler(oauth2LogoutHandler()) 
    .logoutSuccessUrl("/") 
    .clearAuthentication(true) 
    .deleteCookies("JSESSIONID") 
    .invalidateHttpSession(true) 
    .permitAll() 

は、私は、クライアント上のログアウトの設定を追加しました。しかし

、私はそれは認証アプリにリダイレクトするとき、私は、ログイン画面を取得いけない、単にリダイレクトハンドシェイクが発生したと私は戻って、クライアントアプリでよ、私のクライアント上でのログイン」リンクをヒットした場合。

ですから、クライアントアプリケーションでログアウトするとAuthサーバーで「クリア」する必要がありますか?どういうわけかセッション情報は、認証アプリケーションで永続しているが、私はログインセッションをピックアップされている方法を見つけることができません?認証サーバに「ログアウト」を伝達するきれいな方法はありますか?

多くのおかげ

マーティン

+0

WebSecurityConfigurerAdapterを拡張してログアウトを有効にし、認証アプリケーションで投稿を/ logoutに送信するログアウトページを作成する必要があります。あなたはスプリングブーツを使用していますか? –

+0

はいラファエル、私です。私はそれを試してみる、ありがとう。 –

+0

ラファエル - うまくいきました。多くのThanks.all私は今、クライアントにリダイレクトするために認証サーバーを取得する必要があります –

答えて

0

あなたはWebSecurityConfigurerAdapterを拡張ログアウトを有効にし、認証のApp

ログアウトページで/ログアウトにポストを送るログアウトページを作成する必要があります(リソース/テンプレート/logout.ftl)

<html> 
<head> 
    <title>Logout Page</title> 
</head> 
<body> 
    <form role="form" action="logout" method="post"> 
     Logout 
      <input type="hidden" id="csrf_token" name="${_csrf.parameterName}" value="${_csrf.token}"/> 
      <input type="hidden" id="redirect" name="redirect" value="${RequestParameters['redirect']!'/login'}"/> 
      <button type="submit">Logout</button> 
    </form> 
</html> 

リダイレクト入力は、ログアウト後にクライアントアプリケーションにリダイレクトされます

1

https://spring.io/blog/2015/02/03/sso-with-oauth2-angular-js-and-spring-security-part-v#the-logout-experienceは、悪名高いトリッキーな問題に対して本質的に同じ問題を説明します。

ログアウト経験

あなたはホームページの変化がわかります「ログアウト」リンクをクリックしない(挨拶がもはや表示されます)ので、ユーザはもはやUIサーバーで認証された場合。ただし、「ログイン」をクリックすると、認証サーバーで認証と承認のサイクルを経る必要はありません(ログアウトしていないため)。意見は、それが望ましいユーザーエクスペリエンスであるかどうかに関して分けられ、それは悪名高いトリッキーな問題です(シングルサインアウト:Science Directの記事とShibbolethのドキュメント)。理想的なユーザーエクスペリエンスは技術的に実現可能ではないかもしれません。また、ユーザーが本当に必要と言うことを本当に望んでいることを時々疑う必要があります。 「ログアウトしてログアウトしてほしい」と思っていますが、明らかな対応は「ログアウトしましたか?このSSOサーバーによって制御されているすべてのシステムからログアウトしたいのですか、「ログアウト」リンクをクリックしたシステムだけからログアウトしますか?」ここではこのトピックをより広く議論する余地はありませんが、注意。興味がある方は、Open ID Connect仕様の実装についての原則といくつかのアイデア(かなり不評)を考えてください。

は、ここに実装するため、私はSpringベースのOpenID接続のためのgithubの上で提出PR(のOAuth2の拡張子)プロジェクトの承認サーバーの「セッションエンドポイントの終了」:https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server/pull/972。これは、RP起動(またはクライアント起動)ログアウトのためのhttps://openid.net/specs/openid-connect-session-1_0.html#RPLogout仕様の一部を実装します。

私はSpringにはこのためのメカニズムが組み込まれているとは思われません。ログアウトには、私が部分的に実装したもの以外の仕様もあります。どちらを選択した場合でも、文書化された仕様に従うことをお勧めします。

関連する問題