35

dotnetopenauth 3.2 を使用して Openid を実装していますが、クレーム応答で Google にメール アドレスを渡す方法がわかりません。Google が単純な登録をサポートしていないことは知っていますが、Google が何をサポートしているのかはわかりません。

この質問に対する警告は、私が OpenID の学習を始めたばかりであり、仕様をしっかりと把握していないことを知っていることです。これが混乱につながっていると思います。

どんな助けでも大歓迎です!

4

2 に答える 2

52

わかりました。Goolge の Federated Log API グループに質問を投稿したところ、 Attribute exchangeを使用するように言われました。

以下はDotNetOpenAuthのコードです。

このコードを本番環境で使用しないでください。これは説明のみを目的としています。

リクエスト:

using (OpenIdRelyingParty openid = new OpenIdRelyingParty())
{
    IAuthenticationRequest request = openid.CreateRequest(openidurl);

    var fetch = new FetchRequest();
    fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
    request.AddExtension(fetch);

    // Send your visitor to their Provider for authentication.
    request.RedirectToProvider();
}

応答:

OpenIdRelyingParty openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if (response != null)
{
    switch (response.Status)
    {
        case AuthenticationStatus.Authenticated:
        {
            var fetch = response.GetExtension<FetchResponse>();
            string email = string.Empty();
            if (fetch != null)
            {
                email =  fetch.GetAttributeValue(
                    WellKnownAttributes.Contact.Email);
            }

            FormsAuthentication.RedirectFromLoginPage(
                response.ClaimedIdentifier, false);
            break;
        }
        ...
    }
}
于 2009-08-21T17:32:59.020 に答える
1

氏名を取得しようとすると、応答が null です。氏名を取得するための解決策を提供してください。この投稿は本当に役に立ちます ありがとう。このような私のサンプルコード。

var fetch = new FetchRequest();
            fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
            fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
            fetch.Attributes.AddRequired(WellKnownAttributes.Company.CompanyName);
            //fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);

            request.AddExtension(fetch);

if (fetch != null)
         {
             email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
             name = fetch.GetAttributeValue(WellKnownAttributes.Name.FullName);
             company = fetch.GetAttributeValue(WellKnownAttributes.Company.CompanyName);
         } 
于 2012-12-01T08:34:44.567 に答える