Nếu bạn muốn nhà cung cấp OpenID quay lại một url khác, bạn cần sử dụng phương thức OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl)
khi tạo yêu cầu xác thực.
Tuy nhiên, thường bạn không muốn nhà cung cấp OpenID chuyển hướng trở lại url đã bắt đầu trình tự đăng nhập trong ứng dụng của bạn. Bạn muốn quay trở lại điểm mà bạn đã bắt đầu xác thực OpenID để xử lý đúng phản hồi. Giúp với việc đóng gói lớp OpenID từ phần còn lại của logic trong ứng dụng của bạn.
Dưới đây là một ví dụ:
Trong ứng dụng ASP.NET MVC của tôi, tôi có một bộ điều khiển User
với Authenticate
hành động mà xử lý yêu cầu đăng nhập.
Kiểm tra hành động Authenticate
OpenIdRelyingParty.Response
. Nếu đó là null
, các cuộc gọi hành động RedirectToProvider
. Nhà cung cấp trả lại cho cùng một hành động, nơi tôi kiểm tra số Respons.Status
. Nếu đó là AuthenticationStatus.Authenticated
, tôi sử dụng FormsAuthentication.RedirectFromLoginPage
(openid.Response.ClaimedIdentifier, true)
để quay lại trang mà người dùng đã bắt đầu đăng nhập seqeuence từ đó.
Tuy nhiên, nếu trạng thái là AuthenticationStatus.Failed
hoặc 'AuthenticationStatus.Canceled`, tôi có thể cung cấp các bước của người dùng để giải quyết vấn đề này. Tôi có thể cung cấp cho họ để sửa OpenID của họ nếu mistyped hoặc đăng nhập với tên người dùng/mật khẩu để thay thế. (Tôi hỗ trợ cả OpenID và xác thực tên người dùng/mật khẩu cho cùng một mã định danh)
Hộp đăng nhập của tôi nằm trên mọi trang. Nếu nhà cung cấp OpenID chuyển hướng tôi trở lại trang đã khởi tạo yêu cầu đăng nhập, rất có thể trang đó sẽ không có khả năng xử lý lỗi không chính xác.
Nguồn
2009-02-27 16:56:40
Nếu đó là AddCallbackArgument ** s ** –
Có, cảm ơn. Tôi đã sửa chữa câu trả lời của mình. –
Không hoàn toàn đơn giản: "Đối số gọi lại chỉ được hỗ trợ khi một IRelyingPartyAssociationStore được cung cấp cho OpenIdRelyingParty." – Perry