Как я могу изменить код статуса OAuthAuthorizationServerProvider HttpResponse с 400 на свой собственный? - PullRequest
0 голосов
/ 20 февраля 2020

Моим приложением по умолчанию является web-api на C#, который использует Microsoft.Owin.Security.OAuth для аутентификации пользователя. Я строю свою собственную реализацию OAuthAuthorizationServerProvider. Мой метод GrantResourceOwnerCredentials выглядит следующим образом:

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
            {
                //this method searches for user in database
                var user = await accountService.LoginAsync(context.UserName, context.Password);

                if (user != null)
                {
                    if (user.Password == "-1")
                    {
                        //here i want to set different HTTPStatusCode for user that is not registered or has wrong password

                        //context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
                        //context.Response.Context.Response.StatusCode = 403;
                        //context.SetError("403", "password not valid");
                        //context.Rejected();
                        return;
                    }
                }
                else if (user == null)
                {
                    //context.Response.Headers.Add(CoreConfiguration.OwinChallengeFlag, new[] { ((int)HttpStatusCode.NotFound).ToString() });
                    //context.Rejected();
                    return;
                }


//*here goes ClaimsIdentity and AuthenticationTicket creation*

Итак, мой вопрос: как я могу настроить мой HttpStatusCode для ответа в различных ситуациях? Я знаю, что я могу написать свое собственное промежуточное ПО, например, , но я не верю, что это единственный способ.

Проблема в том, что OAuthGrantResourceOwnerCredentialsContext не имеет никакого влияния на реальное HttpRespose, потому что, как я понимаю, этот контекст может быть только допустимым или нет. В зависимости от этого, OAuthAuthorizationServerProvider создает HttpResponse с кодом состояния 200 или 400.

Также я знаю, что для проверки пользователя существует метод ValidateClientAuthentication, но я не нашел способов настроить StatusCode из его OAuthValidateClientAuthenticationContext.

Пожалуйста, объясните мне, где я неправ и возможно ли достичь моей цели?

...