2009-04-07 46 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