4

ログイン プロセスの一環として、DotNetOpenAuth を使用してログインしています。認証の処理にはうまく機能しますが、さまざまな openId プロバイダーからユーザー情報を取得するプロセスはうまく機能していません。

MyOpenId を使用すると、DotNetOpenAuth で ClaimsRequest を使用して要求した完全な情報を取得できます。どうやら SREG プロトコルを使用して、このコンテンツを要求および取得しています。これは MyOpenId ではうまく機能しますが、このプロトコルをサポートしていない (まだ?) Google や Yahoo などのプロバイダーに対しては何もしません。

DotNetOpenAuth (または RPX 以外の他のメカニズム (途中で別の人を探していない:-})) を使用してクロスプロバイダーのユーザー情報を取得する方法はありますか?

4

3 に答える 3

2

実際に行われているやり取りをご覧になることをお勧めします。つまり、サービスがユーザーをプロバイダーにリダイレクトするときに、送信されるパラメーターを確認し、ユーザーが戻ってきたときに、送信されるパラメーターも確認します。

OpenID 2 では、ユーザー情報を要求する方法が 2 つあります。属性交換 (AX) と簡易登録 (SREG) です。SIGが何であるかわかりません。プロバイダーがこれらのプロトコルを実装するかどうか、およびプロバイダーが提供する情報はプロバイダーの選択です (最初は、できればユーザーの選択でもあります)。

Google は AX をサポートしており、常にメール アドレスを提供し、場合によってはユーザーの姓名を提供することがわかりました。私の経験では、Yahoo は要求された ID 以外は何も提供しません。結果として、私は Yahoo をプロバイダーとして受け入れません。http://pypi.python.org/pypi? :action=openidを参照してください。

于 2009-09-07T04:43:14.287 に答える
1

明確にするために、私は答えとしてこのリンクを投稿しています:

http://www.dotnetopenauth.net/developers/code-snippets/the-axfetchassregtransform-b​​ehavior/

このリンクは、ClaimsRequest()を使用してSREGとAXの両方の情報を取得できる小さな構成例(Andrewが述べたように)でのAXFetchAsSregTransform動作の構成ファイル設定を提供します。

これにより、一部(すべてではない)の要求情報を取得できます。Googleの場合、少なくともメールアドレスの取得で機能します。

リクエストするには:

var req = openid.CreateRequest(Request.Form["openid_identifier"]);

var fields = new ClaimsRequest();                       
fields.Email = DemandLevel.Require;
fields.FullName = DemandLevel.Require;

req.AddExtension(fields);

return req.RedirectingResponse.AsActionResult();

応答を受信するには:

var claim = response.GetExtension<ClaimsResponse>();
string email = null, fullname= null, password = null;
if (claim != null)
{
    email = claim.Email;
    fullname = claim.FullName;
}

Googleはメールアドレスのみを取得しているようで、DemandLevel.Requireが必要であることに注意してください。そうでない場合、何も返されません。

于 2009-09-07T22:01:23.630 に答える
0

ここで非常によく似た質問に対する私の答えをチェックしてください:

DotNetOpenId 応答から属性を取得できません

追加:これは、私がこの件について書いたブログ投稿です。AXFetchAsSregTransform の動作を記述する前に記述したため、一部はブログ投稿で提示されているよりも簡単であることに注意してください。ただし、特に注意すべきは、Google が「オプション」の属性リクエストをすべて無視することです。したがって、メールを取得するには、メールを「必須」にする必要があります。

http://blog.nerdbank.net/2009/03/how-to-pretty-much-guarantee-that-you.html

于 2009-09-07T04:45:44.010 に答える