2009-04-07 6 views
5

Je tente de me connecter avec des comptes DotNetOpenId à GMail. Cela fonctionne mais je ne suis pas capable de récupérer des revendications. Je sais que je peux également récupérer des adresses e-mail ou des noms d'utilisateur, mais aucune réclamation n'est renvoyée uniquement. ClaimedIdentifier est disponible. Quelqu'un sait comment récupérer ces données à partir de comptes Gmail? Si vous pouviez me fournir un exemple de configuration de ClaimsRequest, je vous en serais reconnaissant.Récupérer des données GMail à l'aide de DotNetOpenId

Merci

Répondre

2
// Either you're creating this already or you can get to it in 
// the LoggingIn event of the control you're using. 

IAuthenticationRequest request; 

// Add the AX request that says Email address is required. 
var fetch = new FetchRequest(); 
fetch.Attributes.Add(
    new AttributeRequest(WellKnownAttributes.Contact.Email, true)); 
request.AddExtension(fetch); 

Google authentifie l'utilisateur et renvoie l'adresse e-mail, que vous pouvez obtenir avec:

var fetch = openid.Response.GetExtension<FetchResponse>(); 
if (fetch != null) 
{ 
    IList<string> emailAddresses = fetch.GetAttribute(
     WellKnownAttributes.Contact.Email).Values; 
    string email = emailAddresses.Count > 0 ? emailAddresses[0] : null; 
} 

Vous pouvez voir my blog post sur le sujet un peu plus d'informations. La chose importante à noter ici est que Google ne vous dira que l'adresse e-mail de l'utilisateur si vous la marquez comme requis (comme je l'ai fait dans l'extrait ci-dessus). Mais cela signifie également que si l'utilisateur ne veut pas partager son adresse e-mail, il ne peut pas se connecter du tout. Désolé, c'est la façon dont Google l'a configuré. D'autres fournisseurs que les gens utilisent ont des comportements différents, malheureusement.

+0

Merci pour la réponse, j'ai utilisé votre solution dans mon code mais ça ne marche plus, je pense que parce que j'ai inclus plus d'attributs que juste celui de l'email ... donc je vais utiliser cette solution et je vais vous dire .. Comme vous l'avez dit, il est nécessaire de mettre en place un échange par le fournisseur! .. – Hoghweed

+1

Google est unique en ce qu'il ne vous donnera que la valeur d'attribut une fois par utilisateur. Donc, si vous le tester avec votre propre compte Google et cliquez sur "Autoriser ce site à se souvenir de moi", il ne donnera pas l'adresse e-mail la prochaine fois. Votre RP DOIT stocker la valeur et la rappeler la prochaine fois que l'utilisateur se connecte. –

+0

Puis-je forcer Google à oublier en quelque sorte qu'il m'a donné cette information? –

Questions connexes