Реализация репликации доступа к токенам в OAuth 2

Я использовал OWIN OAuth 2 для реализации своего поставщика авторизационного сервера. Теперь я хочу реализовать отмену токена (когда мое клиентское приложение хочет выйти из системы).
Может ли кто-нибудь помочь мне и рассказать о том, как реализовать отмену токена в OWIN KATANA OAuth 2. Есть ли для этого хорошие методы?

Ответ 1

В OAuth 2.0 есть два вида токенов. Один - токен доступа, а другой - токен обновления.

Для токена обновления я действительно рекомендую аутентификацию на основе токена с использованием ASP.NET Web API 2, Owin и Identity, написанной Taiseer Joudeh. Он предоставляет пошаговое руководство по настройке аутентификации на токенах, включая отмену токена обновления.

Для токена доступа я использую черный список для хранения отступленных токенов доступа. Когда пользователь входит в систему, я добавляю токен доступа текущего пользователя в черный список. И если приходит новый запрос, я сначала проверяю, находится ли его токен доступа в черном списке. Если да, отклоните запрос, другой разумный пусть компонент OAuth выполнит проверку.

Вот некоторые детали реализации:

Я использую кеш для работы в виде черного списка и истечения срока действия элемента кэша до истечения срока действия токена доступа. Элемент кэша (токен доступа) будет удален из черного списка после истечения срока его действия. (Нам не нужно хранить токен доступа в черном списке по истечении срока его действия. Если токен истекает, независимо от того, включен ли он в черный список или нет, он не может пройти механизм проверки OAuth).

Следующий код показывает, как отклонить запрос, если его токен доступа находится в черном списке.

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
    {
        Provider = new OAuthBearerAuthenticationProvider()
            {
                OnRequestToken = context =>
                   {
                        if(blackList.contans(context.Token))
                        {
                            context.Token = string.Empty;
                        }

                        return Task.FromResult<object>(null);
                    }
            }
    }

Что мне делать, если я найду токен доступа в черном списке, я установил токен доступа в пустую строку. Позже, когда компонент OAuth пытается проанализировать токен, он обнаруживает, что токен пуст. Определенно, пустая строка не является допустимым токеном, поэтому она будет отклонять запрос так же, как вы отправляете запрос с недопустимым токеном доступа.

Ответ 2

В соответствии с OAuth 20 RFC токен обновления не используется, чтобы отменить токен - обновить "токены доступа" могут иметь более короткий срок службы и меньше разрешений, чем разрешено владельцем ресурса ". Обновить токен используется для увеличения срока службы токена доступа или для возобновления старого токена доступа с новой версией, срок действия которой истекает позже. Это обычно используется для предотвращения повторного запроса пользователя на его учетные данные. Чтобы отозвать токен, поставщик OAuth20 должен выставить такую ​​WS/конечную точку или какой-либо другой механизм.