35 votes

OpenID : Essayer de récupérer l'adresse e-mail de Google OP

J'utilise dotnetopenauth 3.2 pour mettre en œuvre Openid et je ne parviens pas à faire en sorte que Google transmette l'adresse électronique dans la réponse aux réclamations. Je sais que Google ne prend pas en charge l'enregistrement simple, mais je n'arrive pas à déterminer ce qu'il prend en charge.

Je viens de commencer à me familiariser avec OpenID et je sais que je n'ai pas une connaissance approfondie des spécifications, ce qui est à l'origine de ma confusion.

Toute aide serait appréciée !

52voto

Zaffiro Points 2004

J'ai trouvé la solution. J'ai posté une question sur Le groupe Federated Log API de Goolge et on lui a dit d'utiliser Échange d'attributs .

Voici le code pour DotNetOpenAuth .

Veuillez ne pas utiliser ce code en production. C'est uniquement à des fins d'illustration !

La demande :

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

La réponse :

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

1voto

Lorsque j'essaie d'obtenir le nom complet, la réponse est nulle. Veuillez fournir une solution pour obtenir le nom complet, Ce post est vraiment une aide précieuse. Merci. Mon exemple de code est le suivant.

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

Et

if (fetch != null)
         {
             email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
             name = fetch.GetAttributeValue(WellKnownAttributes.Name.FullName);
             company = fetch.GetAttributeValue(WellKnownAttributes.Company.CompanyName);
         }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X