2016-11-23 1 views
1

私はに続き、authserverをクローンしました。プロジェクトにはauthserverclient(テストとして)があります。例は正常に動作しますが、context-pathプロパティを削除した場合(私のアプリは/で動作します)、clientにリダイレクトした後で失敗します。例:clientコンテキストパスなしでSSO認証が失敗する

  1. ゴー(localhost:9999)。
  2. authserverlocalhost:8080)にリダイレクトされます。
  3. GitHub経由のログイン;
  4. authserverにし、すぐに次のURLをclientにリダイレクト:

http://localhost:9999/login?code=dqoxz4&state=79qtJ5

ホワイトレーベルのエラーページが応答:

が予期しないエラーが発生しました(タイプ= Unauthorized、status = 401)。
認証が失敗しました:私は上記のように、それは context-path/である場合にのみ失敗した(またはまったく削除)

アクセストークンを取得できませんでした。それ以外の場合はすべて動作します。あなたのリンクから

答えて

2

コンテキストパスは、そうでない場合は、クッキーのパスが衝突し、 2つのアプリはに同意することはできません、あなたがローカルホスト上でクライアント と認証サーバーの両方を実行している場合、明示的である必要がありますセッション識別子。

私たちは/ uaaの/とAuthServer上のアプリケーションを正常に実行しました。 AuthServerでContext-Pathを設定してみてください。あなたのアプリとAuthServerからのクッキーを見てください:彼らは同じパスを持つべきではありません。

EDIT:

異なるドメインは問題ないはずです。彼らはクッキーを共有しません。 localhostのような同じホスト上では、Cookieはポート固有ではないので、コンテキストパスを使用する必要があります。 https://stackoverflow.com/a/16328399/926620

また、ドメインを/ etc/hosts(linux)またはc:\ windos \ system32 \ drivers \ etc \ hostsに配置することもできます。同じように行を追加します。

127.0.0.1 website authserver 

そして、あなたは開発のために、同じマシン上でhttp://website:9999http://authserver:8080を使用することができます。

また、Cookieに異なる名前を設定することもできます。http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.htmlを参照してください:

server.session.cookie.name=auth 
server.session.cookie.name=web 
+0

...それのように気にいらないが、ルート上で十分ではないpersmissionが通過していたり​​、別のアプリケーションは、このコンテキストパスを使用して、それはあなたのルートコンテキストパスに戻ると思います。ちなみに、私は2つの 'JSESSIONID'をクライアント上に持っています。ローカルIPを使用して認証サーバーにアクセスしようとするとうまくいくのですか? – Feeco

+0

私の投稿を編集します。 –

+0

ありがとう! 'hosts'の解決策はすばらしいです! – Feeco

0

あなたのクライアントアプリケーションでRedirecURIを設定することができます。

security: oauth2: 
client: 
    client-id: acme 
    client-secret: acmesecret 
    access-token-uri: http://localhost:8080/oauth/token 
    user-authorization-uri: http://localhost:8080/oauth/authorize 
    pre-established-redirect-uri: http://localhost:9999/client 

とクライアントの登録中にあなたがのOAuth2サーバー上で設定することができます。

が、私は別のドメイン上の認証サーバーをホストしたい

関連する問題