2009-04-07 52 views
5

我试图用dotNetOpenId登录到GMail帐户。它的工作原理,但我无法检索任何索赔。我知道我也可以检索电子邮件地址或用户名,但没有索赔正在返回只有 ClaimedIdentifier可用。任何人都知道如何从Gmail帐户中检索这些数据?如果你可以请给我一个ClaimsRequest配置的例子,我将不胜感激。通过DotNetOpenId检索GMail数据

感谢

回答

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

谷歌则对用户进行认证,并返回的电子邮件地址,你可以得到:

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

您可以在一个位的更多信息的主题看my blog post。这里需要注意的重要一点是,如果您将Google用户的电子邮件地址标记为必填项(就像我在上面的代码段中完成的那样),Google只会告诉您用户的电子邮件地址。但这也意味着如果用户不想分享他的电子邮件地址,他根本无法登录。对不起,这是Google设置它的方式。不幸的是,人们使用的其他提供者具有不同的行为。

+0

感谢您的回复,我在我的代码中使用了您的解决方案,但它不再工作了,我想因为我已经包含了更多的属性而不仅仅是电子邮件......所以我将使用此解决方案我会告诉你.. 正如你所说,它需要提供商实施交换! – Hoghweed 2009-04-14 13:38:32

+1

谷歌是独一无二的,它只会给你每个用户的属性值一次。因此,如果您使用自己的Google帐户进行测试,然后点击“允许此网站记住我”,它将不会在下次发送电子邮件地址。您的RP必须存储该值,并在用户下次登录时调用它。 – 2009-04-15 04:18:46

+0

我可以强迫谷歌以某种方式忘记它给了我这些信息吗? – 2009-04-21 23:26:19