Как перенаправить, когда пользователь не хочет проходить аутентификацию на странице входа в IdentityServer3? - PullRequest
0 голосов
/ 24 мая 2018

Я использую IdentityServer3 в качестве поставщика OpenId.На странице входа в систему мы хотим разрешить пользователю возвращаться обратно в приложение без аутентификации, если пользователь не хочет продолжать.Например, использование не соответствует условиям и положениям, поэтому мы не можем войти в систему или зарегистрироваться.Они по-прежнему являются анонимными пользователями приложения, которое перевело их на IdentityServer.Поэтому имеет смысл иметь ссылку или кнопку типа «Я не согласен, верните меня к моему приложению» в пользовательском интерфейсе провайдера идентификации.

.NET имеет промежуточное программное обеспечение OpenIdConnect, которое предоставляет обработчик событий под названием OpenIdConnectOptions.Events.OnAuthenticationFailed , который должен вызываться при сбое аутентификации.

Первый вопрос: как вернуть результат из IdentityServer3 для запуска этого обработчика события OnAuthenticationFailed в клиенте .NET?Я действительно не нашел способ вернуть ошибку аутентификации.Я не знаю, будет ли достаточно простого перенаправления без токена.

Второй вопрос: есть другие клиенты (java, javascript, php).Поскольку здесь нет промежуточного программного обеспечения .NET на стороне клиента, как клиент может правильно обработать такой ответ?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Ответ Бычкова помог мне понять, что делать на стороне IdentityServer3.Вот код на случай, если кому-то еще это нужно:

 //Get signinUrl from SignInMessage
 var queryString = new Uri(signInUrl).ParseQueryString();
               var signInId = queryString["signin"];
                var signInMessage = Request.GetOwinContext().Environment.GetSignInMessage(signInId);

                var clientId = signInMessage.ClientId;
                var client = await _clientStore.FindClientByIdAsync(clientId);                    

                var queryStringFromAuthorizeRequest = new Uri(signInMessage.ReturnUrl).ParseQueryString();
                var redirectUrlFromAuthorizeRequest = queryStringFromAuthorizeRequest["redirect_uri"];
                if (client.RedirectUris.Any(c => c == redirectUrlFromAuthorizeRequest))
                {                        
                    return Redirect(redirectUrlFromAuthorizeRequest + "?error=access_denied&error_description=user_denied_consent");
                }
0 голосов
/ 25 мая 2018

Спецификация OAuth 2.0 предоставляет возможные типы ответов, которые вы можете использовать в случаях, когда пользователю не удается получить доступ - https://tools.ietf.org/html/rfc6749#section-4.2.1 (см. Раздел 4.2.2.1. Ответ об ошибке).Поэтому OP должен перенаправить обратно на обратный вызов с параметрами URL error и error_description.Например:

https://rp.com/callback?error=access_denied&error_description=User отказано в согласии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...