2009-09-08 2 views
6

Я использую DotNetOpenAuth для интеграции openID в нашем веб-приложении. Код ниже запрашивает информацию у поставщика.Почему нет информации о пользователе openID, проходящем через протокол?

try 
{ 
    var req = openid.CreateRequest(Request.Form["openid_identifier"]); 
    req.AddExtension(new DotNetOpenAuth.OpenId.Extensions.SimpleRegistration.ClaimsRequest 
    { 
    Email = DotNetOpenAuth.OpenId.Extensions.SimpleRegistration.DemandLevel.Require, 
    FullName = DotNetOpenAuth.OpenId.Extensions.SimpleRegistration.DemandLevel.Require, 
    Nickname = DotNetOpenAuth.OpenId.Extensions.SimpleRegistration.DemandLevel.Request, 
    PostalCode = DotNetOpenAuth.OpenId.Extensions.SimpleRegistration.DemandLevel.Request 
    }); 

    return req.RedirectingResponse.AsActionResult(); 
} 

По какой-то причине ответ поставщика openID никогда не поставляется с информацией, которую я запрашиваю. Ниже приведен код:

// Stage 3: OpenID Provider sending assertion response 
switch (response.Status) { 
    case AuthenticationStatus.Authenticated: 
    Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay; 
    FormsAuthentication.SetAuthCookie(response.ClaimedIdentifier, false); 
    if (!string.IsNullOrEmpty(returnUrl)) { 
     return Redirect(returnUrl); 
    } else { 
     return RedirectToAction("Index", "Home"); 
    } 

Я пробовал: response.ClaimedIdentifier миллиона способов и он никогда не имеет ценную информацию, что я могу сделать что-то с. Есть идеи?

ответ

6

IAuthenticationResponse.ClaimedIdentifier Недвижимость never содержит эти атрибуты, которые вы запрашиваете. Он содержит только «имя пользователя» пользователя OpenID.

Вы отправляете запрос отлично. Просто добавьте немного к обработке положительного ответа:

// Stage 3: OpenID Provider sending assertion response 
switch (response.Status) { 
    case AuthenticationStatus.Authenticated: 
    Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay; 
    FormsAuthentication.SetAuthCookie(response.ClaimedIdentifier, false); 
    var sreg = response.GetExtension<ClaimsResponse>(); 
    if (sreg != null) { // the Provider MAY not provide anything 
     // and even if it does, any of these attributes MAY be missing 
     var email = sreg.Email; 
     var fullName = sreg.FullName; 
     // get the rest of the attributes, and store them off somewhere. 
    } 
    if (!string.IsNullOrEmpty(returnUrl)) { 
     return Redirect(returnUrl); 
    } else { 
     return RedirectToAction("Index", "Home"); 
    } 
    break; 
    // ... 
+0

Hi Andrew: Большое спасибо. Google возвращает электронное письмо, Yahoo - нет. Я ценю вашу помощь. – Geo

+0

Yahoo должен быть теперь ... они просто обновлены, чтобы поддержать его. –

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

  • Нет связанных вопросов^_^