OpenID: пытается получить адрес электронной почты от Google OP - PullRequest
35 голосов
/ 19 августа 2009

Я использую dotnetopenauth 3.2 для реализации Openid и не могу понять, как заставить Google передать адрес электронной почты в ответе на претензии. Я знаю, что Google не поддерживает простую регистрацию, но я не могу определить, что они поддерживают.

Предостережение в этом вопросе заключается в том, что я только начал изучать OpenID и знаю, что не совсем разбираюсь в спецификации, которая, как мне кажется, приводит к моей путанице.

Любая помощь будет оценена!

Ответы [ 2 ]

52 голосов
/ 21 августа 2009

Хорошо, разобрался. Я опубликовал вопрос по API-интерфейсу федеративного журнала Goolge , и мне сказали использовать Обмен атрибутами .

Ниже приведен код для 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;
        }
        ...
    }
}
1 голос
/ 01 декабря 2012

Когда я пытаюсь получить ФИО, ответ ноль, предоставьте решение, чтобы получить ФИО, Этот пост действительно поможет Поблагодарить. Мой пример кода, как это.

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);
         } 
...