2009-04-07 3 views
5

Я пытаюсь войти с dotNetOpenId в учетные записи GMail. Он работает, но я не могу получить какие-либо претензии. Я знаю, что могу получить адреса электронной почты или имена пользователей, но претензии не возвращаются только в ClaimedIdentifier. Кто-нибудь знает, как получить эти данные из учетных записей Gmail? Если бы вы могли предоставить мне пример конфигурации ClaimsRequest, я был бы благодарен.Получить данные GMail через DotNetOpenId

Благодаря

ответ

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 затем проверяет подлинность пользователя и возвращает адрес электронной почты, который вы можете получить с:

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 установил его. К сожалению, другие провайдеры, которые используют люди, имеют разные формы поведения.

+0

Спасибо за ответ, я использовал ваше решение в своем коде, но он больше не работает, я думаю, потому что я включил больше атрибутов, чем только электронную почту ... поэтому я собираюсь использовать это решение и я вам скажу .. Как вы сказали, что это было сделано для осуществления обмена провайдером! .. – Hoghweed

+1

Google уникален тем, что он даст вам только значение атрибута ONCE для пользователя. Поэтому, если вы проверите его со своей учетной записью Google и нажмите «Разрешить сайту запоминать меня», он не будет указывать адрес электронной почты в следующий раз. Ваш RP ДОЛЖЕН хранить значение и вызывать его при следующем входе пользователя в систему. –

+0

Могу ли я заставить Google как-то забыть, что он дал мне эту информацию? –

Смежные вопросы