のような大きなライブラリを使用したくない場合は、OpenIDプロトコルを手動で実装する必要があります。 Here are the specificationsに従う必要があります。
これは、私は既存のライブラリを使用することをお勧めします。 DotnetOpenAuth
は.NET用の参照ライブラリです。
また、OpenIdとOAuthは異なる標準であり、異なるものを実現するように設計されています。OpenId
は認証用ですが、OAuth
は承認用です。
異なるOpenIDプロバイダーからログオンできる同じユーザーを特定する限り、それらを識別するために何かが必要になります。
using (var openid = new OpenIdRelyingParty())
{
var request = openid.CreateRequest(Identifier.Parse(openid_identifier));
request.AddExtension(new ClaimsRequest
{
BirthDate = DemandLevel.NoRequest,
Email = DemandLevel.Require,
FullName = DemandLevel.Require
});
}
とあなたの内部データベース内のユーザを識別するために、この情報を使用します。DotnetOpenAuthとたとえばあなたがフルネームと電子メールを必要とする可能性がOpenIDプロバイダに認証要求を作成するとき。
ので、ここでアイデアです:
- あなたのサイトのユーザーが含まれています内部データベーステーブルを作成します。最初はこのテーブルは空です。
- ユーザーがあなたのサイトに来て、それを使いたいと考えています。彼はまだ認証されていないので、あなたは彼の信任状を求める。あなたは彼にOpenIdプロバイダを選択して認証要求を準備し、認証のためにプロバイダにリダイレクトする機能を提供します。
- ユーザーはプロバイダで認証され、サイトにリダイレクトされます。現時点では、彼が主張している身元を知っており、ユーザーをユーザーテーブルに追加します。ユーザーはいつでもあなたのサイトに戻ってログインすることができます。
- 認証されたユーザーに、別のOpenIdプロバイダを追加する可能性があります(StackOverflowと同じように)。重要なアイデアは、これを行うためにユーザーが既にあなたのサイトに認証されている必要があるということです。だから、彼は代わりのOpenIdプロバイダーに入り、認証のためにこのプロバイダーにリダイレクトされます。認証を受けると、彼はあなたのサイトにリダイレクトされ、すでにあなたのサイトに認証されているので、代替のOpenIdプロバイダをusersテーブルに追加することができます。
- OpenIdプロバイダーからのリダイレクトを処理するコントローラーアクションでは、ユーザーがサイトに対して既に認証されているかどうか、
FormsAuthentication.GetAuthCookie
を使用して認証していない場合は、要求されたIDを渡す必要があります。要求されたIDが内部ユーザーテーブルに存在しない場合は、追加する必要があります。ユーザーが既にサイトに認証されている場合は、ユーザーのプロファイルに代替のOpenIdプロバイダーを追加しているため、ユーザーテーブルを更新して新しいプロバイダーを追加することになります。
Googleログインシステムの実装がわかりましたか? – Roman
@ローマン、個人的に私はDotnetOpenAuthを使用します。 –
ありがとうございます。私はそれがあまりにも複雑で100%信頼できることを恐れていました。それは...ですか? :) – Roman