получить OWIN токен на предъявителя перед возвратом ответа - PullRequest
0 голосов
/ 09 апреля 2019

Я реализовал аутентификацию с OWIN и токеном на предъявителя, и она отлично работает при входе пользователя в систему.

Когда вызывается \ Token URL и ему передается имя пользователя / пароль, это дает токен в ответ. Но я хотел бы сохранить этот токен в базе данных, чтобы вместо повторного вызова к серверу я мог получить токен в коде? Я не могу получить значение сгенерированного токена в заявке или любом другом объекте.

             public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{ 
return Task.Factory.StartNew(() =>
 {

var username = context.UserName;

            var password = context.Password;


            var userService = new UserService();
            User user = userService.GetUserByCredentials(username, password);
            if (user != null)
            {
                var claims = new List<Claim>()
                {
                    new Claim(ClaimTypes.Name, user.userName),
                    new Claim("UserID", user.userName)
                };

                ClaimsIdentity oAutIdentity = new ClaimsIdentity(claims, Startup.OAuthOptions.AuthenticationType);


              var ticket = new AuthenticationTicket(oAutIdentity, new AuthenticationProperties() { });

         context.Validated(ticket);

            }
            else
            {
                context.SetError("invalid_grant", "Error");
            }
        });
    }

Я отлаживаю код, но удивительно, что access_token нигде не виден, только получая его в результатах почтальона.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Токен недействителен вечно. Новый токен предоставляется для каждой аутентификации и действует в течение определенного периода времени. Нет смысла сохранять этот токен в базе данных.

0 голосов
/ 14 мая 2019

Конечно, вы можете. Вам просто нужно переопределить метод TokenEndpointResponse внутри вашего authServerProvider : OAuthAuthorizationServerProvider.

Внутри OAuthTokenEndpointResponseContext есть поле с именем accessToken, в которое можно получить значение токена.

   public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
        {
            // Summary:
            //     Called before the TokenEndpoint redirects its response to the caller.
            return Task.FromResult<object>(null);
        }
...