通过DotNetOpenId检索GMail数据

通过DotNetOpenId检索GMail数据,gmail,dotnetopenauth,Gmail,Dotnetopenauth,我正在尝试使用dotNetOpenId登录到GMail帐户。它工作,但我无法检索任何索赔。我知道我也可以检索电子邮件地址或用户名,但不会返回任何声明,只有ClaimedIdentifier可用。有人知道如何从Gmail帐户中检索这些数据吗?如果您能为我提供索赔请求配置的示例,我将不胜感激 谢谢 // Either you're creating this already or you can get to it in // the LoggingIn event of the control

我正在尝试使用dotNetOpenId登录到GMail帐户。它工作,但我无法检索任何索赔。我知道我也可以检索电子邮件地址或用户名,但不会返回任何声明,只有ClaimedIdentifier可用。有人知道如何从Gmail帐户中检索这些数据吗?如果您能为我提供索赔请求配置的示例,我将不胜感激

谢谢

// 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;  
}
var fetch=openid.Response.GetExtension();
if(fetch!=null)
{  
IList emailAddresses=fetch.GetAttribute(
WellKnownAttributes.Contact.Email)。价值观;
字符串email=emailAddresses.Count>0?emailAddresses[0]:空;
}

你可以在这个主题上看到更多的信息。这里需要注意的重要一点是,如果您将用户的电子邮件地址标记为所需的地址(正如我在上面的代码片段中所做的那样),谷歌只会告诉您该用户的电子邮件地址。但这也意味着,如果用户不想共享他的电子邮件地址,他根本无法登录。对不起,谷歌就是这样设置的。不幸的是,人们使用的其他提供商有不同的行为。

感谢您的回复,我在代码中使用了您的解决方案,但它不再有效,我想因为我包含了比电子邮件更多的属性…所以我将使用此解决方案,我会告诉您。。正如您所说的,需要通过提供商实现交换!。。谷歌的独特之处在于它只为每个用户提供一次属性值。因此,如果你用自己的谷歌账户测试它,然后点击“允许这个网站记住我”,下次它就不会给出电子邮件地址了。您的RP必须存储该值,并在用户下次登录时调用该值。我是否可以强制google忘记它给了我这些信息?是的。访问并“撤销访问”您的RP。这将使谷歌下次再次发送数据。安德鲁,这是一种常见的做法(对于谷歌这样的提供商)这样做吗?听起来。。。有点。。。瘸的