2010-12-30 3 views
4

私は、StackOverflowでOpenIDを使用しています。私が本当に必要とすることは、私のサイトのすべてのサブドメインでOpenIDが動作することです。サブドメイン間の単一のOpenID

サイトでは、それぞれの地域が持っている、それは自分のサブドメインがありますでずっとKijijiは同じように動作

  • calgary.example.com
  • toronto.example.com
  • vancouver.example.com

ユーザーが「カルガリー」にログインし、後で「トロント」にログインすると、彼らは「許可」を強制されますその結果、新しいOpenIDが作成され、新しいログインにもなります。

私のアプリは1つのアカウントで複数のOpenIDを持つことができますが、それは管理が面倒です。

プロバイダをトップレベルドメインまでリンクさせ、その後すべてのサブドメインで機能させる方法はありますか?

私はDotNetOpenAuthを使用しています。

私は、ユーザにhttp://example.comでログインし、フォーム認証domain = ".example.com"を使用してすべてのサブドメインに移動できるようにすることを強くお勧めします。

答えて

5

はい。 ASP.NETコントロールのRealmプロパティを設定するか、(プログラムで行う場合)を "https://*.example.com"に設定します。スキームはhttpでもhttpsでもかまいませんが、でなければなりません。あなたのReturnToプロパティにあるスキームは、現在のリクエストで使用されているスキームと一致する必要があります。

Googleからの既存のユーザーがいる場合、このレルムの1回限りの変更により、Googleはユーザーのために全く新しい識別子を生成するため、すべてのアカウントにアクセスできなくなります。したがって、常に1つのレルムを決定して保持することは非常に重要です。後で変更するときに、ユーザーを自分のアカウントに結びつけるためには、大きなフープを飛ばなければなりません。

ワイルドカード自体は心配しないでください。レルムとしてhttps://*.example.comを設定すると、そのパターンに一致するすべてのサイトがすべてと同じ Google識別子を取得します。

+0

nm、取得します。私はそれを 'Dim realm =" http:// "&Request.Url.Host'に変更しました。 –

+1

最後の式にはワイルドカードが含まれていません。これは、あなたが設定した内容を達成していないことを示しています。あなたが探しているものは 'Request.Url.Scheme&":// *。 " &HostStrippedDomainName' –