Как аннулировать токен носителя на сервере

Я сохраняю все сгенерированные токены носителя в базе данных во время входа в систему. Теперь я хочу проверить, не существует ли носитель запроса в базе данных, отклонить его. Куда мне его положить?

Обратите внимание, что я хочу, чтобы это произошло в конвейере Owin. (Нет в конвейере webapi. Например, внутри атрибута [Authorize])


person Mahmoud Moravej    schedule 09.02.2016    source источник
comment
Я сохраняю все сгенерированные токены носителя в базе данных во время входа в систему, вам не следует этого делать. Это как хранить пароли в виде простого текста   -  person Toolkit    schedule 16.11.2018
comment
Да, вы правы, и я не сделал этого в конце. Как я объяснил в ответе, я только что добавил в токен некоторые серверные ключи, которые будут проверены на этапе расшифровки токена.   -  person Mahmoud Moravej    schedule 18.11.2018
comment
как получить доступ к необработанным токенам на предъявителя?   -  person Toolkit    schedule 15.01.2019


Ответы (1)


Наследовать от OAuthBearerAuthenticationProvider следующим образом:

public class ApplicationOAuthBearerAuthenticationProvider : OAuthBearerAuthenticationProvider
{    

    public override Task ValidateIdentity(OAuthValidateIdentityContext context)
    {            
        var result=  base.ValidateIdentity(context);

        if (context.IsValidated )
        {
            var ticket = context.Ticket;

            if (ticket != null && ticket.Identity.IsAuthenticated && ticket.Properties.ExpiresUtc > DateTime.UtcNow)
            {
                if (1==2)//TODO: put your server side condition here
                {
                    context.SetError("HaHa!");
                }
            }

        }

        return result;

    }

}

и используйте его в своем классе startup.cs следующим образом:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
        {
            Provider = new ApplicationOAuthBearerAuthenticationProvider(),             
        });  
    }
}
person Mahmoud Moravej    schedule 09.02.2016