2010-03-26 25 views
5

Tôi đang cố sử dụng thư viện DotNetOpenId để thêm hỗ trợ OpenID trên trang web thử nghiệm. Đối với một số lý do nó vẫn cho tôi lỗi sau khi chạy trên Firefox. Hãy nhớ rằng tôi đang sử dụng localhost như tôi đang thử nghiệm nó trên máy cục bộ của tôi.Không có điểm cuối OpenID nào được tìm thấy

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy; 
using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; 
using DotNetOpenAuth.OpenId.RelyingParty; 

namespace TableSorterDemo 
{ 
    public partial class Login : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      var openid = new OpenIdRelyingParty(); 
      if (openid.GetResponse() != null) 
      { 
       switch (openid.GetResponse().Status) 
       { 
        case AuthenticationStatus.Authenticated: 
         var fetch = openid.GetResponse().GetExtension(typeof(ClaimsResponse)) as ClaimsResponse; 
         var nick = fetch.Nickname; 
         var email = fetch.Email; 

         break; 
       } 
      } 
     } 

     protected void OpenIdLogin1_LoggedIn(object sender, OpenIdEventArgs e) 
     { 
      var openid = new OpenIdRelyingParty(); 
      if(openid.GetResponse() != null) 
      { 
       switch(openid.GetResponse().Status) 
       { 
        case AuthenticationStatus.Authenticated: 
         var fetch = openid.GetResponse().GetExtension(typeof (ClaimsResponse)) as ClaimsResponse; 
         var nick = fetch.Nickname; 
         var email = fetch.Email; 

         break; 
       } 
      } 


     } 

     protected void OpenIdLogin1_LoggingIn(object sender, OpenIdEventArgs e) 
     { 
      var openid = new OpenIdRelyingParty(); 
      var req = openid.CreateRequest(OpenIdLogin1.Text); 
      var fetch = new ClaimsRequest(); 
      fetch.Email = DemandLevel.Require; 
      fetch.Nickname = DemandLevel.Require; 
      req.AddExtension(fetch); 
      req.RedirectToProvider(); 
      return; 
     } 


    } 
} 

Ngoài ra, nếu tôi chạy cùng một trang trong Chrome sau đó tôi nhận được như sau:

Đăng nhập thất bại: Thông báo này đã được xử lý. Điều này có thể cho thấy một cuộc tấn công phát lại đang diễn ra.

+0

Câu hỏi của bạn bao gồm "cung cấp cho tôi lỗi sau khi chạy trên FireFix". Firefix? Và bạn đã bỏ sót lỗi bạn nhận được. –

Trả lời

5

Kết quả phát hiện tấn công phát lại từ bạn gọi GetResponse() hai lần. Bạn không được làm điều đó. Thay vào đó, chỉ định kết quả của chỉ một cuộc gọi đến GetResponse() đến một biến cục bộ và sau đó kiểm tra nó với null và sử dụng nó theo cách khác.

Về lỗi "Không tìm thấy điểm cuối OpenID", bạn có đang thử nghiệm với OpenID cục bộ cũng như OpenID được tổ chức bởi bên ngoài như Yahoo không?

+0

Tôi đang thử nghiệm với OpenID locahost. – azamsharp

+4

Sau đó, hãy đảm bảo tệp web.config của RP cho phép OpenID địa phương, như được hiển thị trong tệp web.config này: http://github.com/AArnott/dotnetopenid/blob/master/samples/OpenIdRelyingPartyMvc/Web.config bằng ' 'tag. –

4

Trong trường hợp của tôi khi tôi đang sử dụng proxy để kết nối với internet, tôi đã giải quyết bằng cách thêm cấu hình sau vào web.config.

<system.net> 
<defaultProxy useDefaultCredentials="true"> 
    <proxy autoDetect="True" usesystemdefault="True" /> 
</defaultProxy> 
</system.net> 
0

Cần lưu ý rằng thông báo lỗi 'Không có OpenID tìm thấy' có thể không đúng mô tả vấn đề.

Đối với bản thân mình đó là vì tôi đã sử dụng địa chỉ email gmail của tôi, nhưng thực sự bạn cần phải tạo ra một OpenId account sau đó bạn sẽ nhận được một id trong các định dạng .myopenid.com/

Nhập rằng Id vào hình thức và nó nên hoạt động chính xác.

0

Kiểm tra web.config trong ứng dụng khách của bạn. Có một phần

    <!-- Uncomment to enable communication with localhost (should generally not activate in production!) --> 
       <!--<add name="localhost" />--> 

So as it says - uncomment to 
<add name="localhost" /> 
Các vấn đề liên quan