Tôi đang tích hợp OpenID vào ứng dụng hiện có của mình với các nhà cung cấp LiveID và Google. Trên trang đăng nhập của tôi, ngoài các trường đăng nhập ban đầu, tôi đã thêm các nút 'Đăng nhập bằng Google' và 'Đăng nhập bằng Microsoft'.Xử lý xác thựcResult từ các nhà cung cấp khác nhau trong cùng một trang
tôi có thể đọc thành công dữ liệu AuthenticationResult cho cả các nhà cung cấp ở trên, nhưng đang thực hiện điều này theo cách sau đây ...
Đối với các nút đăng nhập mới Tôi crafted một URL trả về để phân biệt chúng về lợi nhuận của người dùng:
Protected Sub btn_google_Click(sender As Object, e As EventArgs) Handles btn_google.Click
Dim client As New GoogleOpenIdClient
Dim u As New System.Uri("http://www.mytest.com/login.aspx?action=signin&provider=google")
client.RequestAuthentication(New HttpContextWrapper(HttpContext.Current), u)
End Sub
Protected Sub btn_live_Click(sender As Object, e As EventArgs) Handles btn_live.Click
Dim client As New MicrosoftClient("xyz", "12345")
Dim u As New System.Uri("http://www.mytest.com/login.aspx?action=signin&provider=microsoft")
client.RequestAuthentication(New HttpContextWrapper(HttpContext.Current), u)
End Sub
Vì vậy, khi người dùng được chuyển hướng trở lại Login.aspx, tôi sau đó có kiểm tra sau đây để xử lý các chức năng đăng nhập:
If Not Page.IsPostBack Then
If Request.QueryString("action") IsNot Nothing AndAlso Request.QueryString("action").Trim = "signin" Then
If Request.QueryString("provider") IsNot Nothing AndAlso Request.QueryString("provider").Trim <> String.Empty Then
Select Case Request.QueryString("provider").Trim
Case "microsoft"
Dim client As New MicrosoftClient("xyz", "12345")
Dim u As New System.Uri("http://www.mytest.com/loginlive.aspx?action=signin&provider=microsoft")
Dim result As DotNetOpenAuth.AspNet.AuthenticationResult = client.VerifyAuthentication(New HttpContextWrapper(HttpContext.Current), u)
' remainder of logic removed
' ...
Case "google"
Dim client As New GoogleOpenIdClient
Dim result As DotNetOpenAuth.AspNet.AuthenticationResult = client.VerifyAuthentication(New HttpContextWrapper(HttpContext.Current))
' remainder of logic removed
' ...
End Select
End
End
End If
Câu hỏi chính của tôi ở đây là, đây có phải là cách tốt để xử lý AuthenticationResults không? Hoặc, có cách nào tốt hơn/an toàn hơn/thông minh hơn để thực hiện tương tự không?
Cảm ơn bạn đã nhập. Tôi đánh giá cao điểm của bạn, nhưng có một số đặt chỗ, cụ thể là ... Tôi hy vọng có thể đăng nhập tự động vào hệ thống của tôi nếu họ đã đăng nhập qua Google với một liên kết như thế này 'www.mydomain.com/autologin. aspx? provider = Google' để tiết kiệm thời gian khi nhấn nút phụ trên trang đăng nhập thông thường. Cũng vì các giá trị chuỗi như ConsumerKey chỉ được sử dụng một lần, di chuyển chúng vào một lớp sẽ cần biên dịch lại mỗi khi chúng được cập nhật. Đó là thực hành tốt? Xin lỗi kỹ năng mã hóa của tôi chỉ là trung bình vì vậy tôi có thể đã bỏ lỡ một số điểm chính với cách tiếp cận của bạn. – EvilDr
1. đăng nhập trực tiếp: bạn vẫn có thể đạt được điều này theo mẫu tôi đã nói ở trên. Sử dụng cùng một phương pháp được sử dụng trong nút đăng nhập. Sử dụng cùng một cách tải trang của autologin.aspx 2. Di chuyển Consumerkey vào mã: khóa người dùng có thể được lưu trong tệp cấu hình hoặc tài nguyên và bạn có thể giới thiệu trực tiếp mã đó vào mã của mình. Tôi hy vọng điều này sẽ trả lời truy vấn của bạn. –
Tuyệt vời. Các bit tôi đang đấu tranh để xem là * tại sao * mã của bạn là tốt hơn so với cách tiếp cận của tôi. Một lần nữa đổ lỗi cho kinh nghiệm của tôi, chỉ cần một số con trỏ sẽ là tuyệt vời! – EvilDr