2009-09-08 31 views
6

Tôi đang sử dụng DotNetOpenAuth để tích hợp OpenID trong ứng dụng web của chúng tôi. Mã dưới đây yêu cầu thông tin cho nhà cung cấp.Tại sao không phải là thông tin về người dùng openID đến thông qua giao thức?

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

Vì lý do nào đó, phản hồi từ nhà cung cấp openID không bao giờ có thông tin tôi yêu cầu. Dưới đây là mã số:

// 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"); 
    } 

Tôi đã thử: phản hồi. Đã xác định hàng triệu cách và không bao giờ có thông tin giá trị mà tôi có thể làm. Bất kỳ ý tưởng?

Trả lời

6

Tài sản IAuthenticationResponse.ClaimedIdentifierkhông bao giờ chứa những thuộc tính bạn đang yêu cầu. Nó chỉ chứa "tên người dùng" của người dùng OpenID.

Bạn đang gửi yêu cầu một cách hoàn hảo. Chỉ cần thêm một chút để xử lý phản hồi tích cực:

// 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

Xin chào Andrew: Cảm ơn rất nhiều. Google trả lại email, Yahoo thì không. Tôi đánh giá cao sự giúp đỡ của bạn. – Geo

+0

Yahoo nên bây giờ ... họ chỉ cần nâng cấp để hỗ trợ nó. –

Các vấn đề liên quan