Если вы хотите, чтобы поставщик OpenID возвращался на другой URL, вам нужно использовать метод OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl)
при создании запроса аутентификации.
Однако обычно вы не хотите, чтобы провайдер OpenID перенаправлял обратно на URL, который инициировал последовательность входа в систему в вашем приложении. Вы хотите вернуться к точке, в которой вы инициировали авторизацию OpenID для правильной обработки ответа. Помогает инкапсулировать слой OpenID из остальной логики в вашем приложении.
Вот пример:
В моем приложении ASP.NET MVC у меня есть контроллер User
с действием Authenticate
, которое обрабатывает запросы на вход в систему.
Действие Authenticate
проверяет OpenIdRelyingParty.Response
. Если это null
, действие вызывает RedirectToProvider
. Поставщик возвращается к тому же действию, где я проверяю Respons.Status
. Если это AuthenticationStatus.Authenticated
, я использую FormsAuthentication.RedirectFromLoginPage
(openid.Response.ClaimedIdentifier, true)
, чтобы вернуться на страницу, с которой пользователь инициировал последовательность входа в систему.
Однако, если статус AuthenticationStatus.Failed
или «AuthenticationStatus.Canceled», я могу предложить пользователю шаги для решения этой проблемы. Я могу предложить им исправить свой OpenID, если он введен неправильно, или вместо этого войти в систему с именем пользователя / паролем. (Я поддерживаю как OpenID, так и аутентификацию по имени / паролю для одного и того же идентификатора)
Мой логин есть на каждой странице. Если поставщик OpenID перенаправил меня обратно на страницу, которая инициировала запрос входа в систему, есть вероятность, что эта страница не сможет правильно обработать ошибку.