web-dev-qa-db-ja.com

外部認証はどのように機能しますか?

たとえば、OpenID、Yahooなどの外部Webサイトにログインすることで、stackexchange Webサイトにログインできます。これはどのように機能しますか? Webサイト(SEやYahoo!など)はどのように通信しますか? Yahoo!それが本当にstackexchangeであることを知っていますか? stackexchangeは、Yahoo!に正常にログインしたことをどのようにして知るのですか?そしてそれは本当にYahoo!ですか? stackexchangeは、Yahoo!にログアウトしたかどうかを知っていますか?ここにログインした後

7
Fitri

特定の例では、StackExchangeはOpenIDを使用します。 OpenIDは、IDプロバイダーの考え方をサポートしています。Yahooは、Google、MyOpenIDなどと同じIDプロバイダーです。StackExchangeにログインするには、使用するプロバイダーを尋ね、そのプロバイダーのログインページにリダイレクトします。

プロバイダーに対して認証すると、プロバイダーはトークンを使用してStackExchangeにリダイレクトします。このトークンには、ID情報が含まれています。これは一般にクレームベース認証と呼ばれ、クレームはアイデンティティに関する情報の一部です。あなたの名前とクレームはトークンにバンドルされています。

通信はHTTP 302リダイレクトを介して行われ、HTTP POSTはすべてユーザーのブラウザーを介して行われます。 YahooのURLにはStackExchangeであることを示すパラメータが含まれているため、YahooはStackExchangeを知っています。 StackExchangeは、IDトークンがYahooによって署名されているため、Yahooからのものであることを認識しています。

ここを参照してください: http://openid.net/get-an-openid/what-is-openid/

そしてここ: http://openidexplained.com/

11
Steve

IDトークンに関して-いくつかの形式をとることができます。ある特定のケース(私がOpenIDをサポートしていることを知っています)では、トークンは事実上一連のURLパラメータです。それらは以下を含む多くのものを提供します:

  1. あなたが誰であるかを一意に識別する(例:OpenID/URL)
  2. サイン。これは、上記のID情報とOpenIDプロバイダーとStackExchangeだけが知っている事前に確立されたシークレットから作成された暗号化ハッシュです。

識別情報を変更すると、署名が壊れ、StackExchangeはログインを拒否します。また、共有秘密がわからないため、署名を最初から再作成することはできません。

もう1つのトークンの形式は、私がよく知っているものですが、長い疑似ランダム文字列です。ブラウザーは、これをURLに含むIDプロバイダーから戻ります。次に、クライアントサイト(StackExchangeなど)がトークンをIDプロバイダーと直接照合します。プロバイダーは最近発行されたトークンのリストを調べ、見つかった場合は、クライアントを一意に識別する情報を返します。

logout/single-sign-outについて-いいえ、StackExchangeはOpenIDサービスからログアウトするかどうかを認識しません。同様に、StackExchangeからログアウトしても、OpenIDプロバイダーには通知されません。

一部のシステム(Google mail/docs/calendarは良い例です)は代わりに、使用しているサイト/サービスからログアウトするアプローチを使用しますand IDプロバイダーサービス。ただし、他のすべてのサービスは影響を受けません。例えば:

  1. Gmailにログイン
  2. Googleドキュメントへのリンク(再度サインインする必要はありません)
  3. Gmailからログアウト(Googleドキュメントセッションは影響を受けません)
  4. 次にアクセスするGoogleサービスは、もう一度ログインするように要求します

参照:

6
JohnNKing