Что такое токен носителя OAuth 2.0?


по данным RFC6750-структура авторизации OAuth 2.0: использование токена носителя, токен носителя:

токен безопасности со свойством, которое любая сторона, владеющая токеном ("носитель"), может использовать токен любым способом, который может использовать любая другая сторона, владеющая им.

для меня это определение расплывчато и я не могу найти каких-либо указаний.

  • предположим, что я реализую поставщика авторизации, могу ли я предоставить какую-либо строку для токена на предъявителя?
  • может ли это быть случайная строка?
  • должна ли это быть кодировка base64 некоторых атрибутов?
    Должен ли он быть хэширован?
  • и должен ли поставщик услуг запрашивать поставщика авторизации для проверки этого маркера?

Спасибо за любой указатель.

3 67

3 ответа:

Токен На Предъявителя
Маркер безопасности со свойством, которым обладает любая сторона токен ("носитель") может использовать токен любым другим способом партия во владении им может. Использование токена на предъявителя не делает требовать от предъявителя доказательства владения материалом криптографического ключа (доказательство владения).

токен носителя или токен обновления создается для вас сервером аутентификации. Когда пользователь аутентифицирует ваше приложение (клиент) затем сервер аутентификации переходит и генерирует для вас токен носителя (токен обновления), который затем можно использовать для получения токена доступа.

токен носителя обычно является своего рода секретным значением, созданным сервером аутентификации. Он не является случайным; он создается на основе пользователя, предоставляющего вам доступ, и клиента, получающего доступ к вашему приложению.

для доступа к API, например, вам нужно использовать маркер доступа. Токены доступа представляют собой кратковременные (около час.) Вы используете маркер носителя для получения нового маркера доступа. Чтобы получить маркер доступа, вы отправляете серверу аутентификации этот маркер носителя вместе с вашим идентификатором клиента. Таким образом, сервер знает, что приложение, использующее токен носителя, является тем же приложением, для которого был создан токен носителя. Пример: я не могу просто взять токен на предъявителя, созданный для вашего приложения, и использовать его с моим приложением, он не будет работать, потому что он не был создан для меня.

Google обновить токен выглядит что-то вроде этого: 1/mZ1edKKACtPAb7zGlwSzvs72PvhAbGmB8k1zrgxpcnm

скопировано из комментария: я не думаю, что есть какие-либо ограничения на токены на предъявителя, которые вы предоставляете. Единственное, о чем я могу думать, это то, что приятно позволить больше, чем один. Например, пользователь может аутентифицировать приложение до 30 раз, и старые токены-носители будут по-прежнему работать. о, и если он не использовался, скажем, 6 месяцев, я бы удалил его из вашей системы. Это ваш сервер аутентификации, который должен будет создайте их и проверьте их так, как это отформатировано до вас.

обновление:

токен носителя задается в заголовке авторизации каждого встроенного действия HTTP-запроса. Например:

POST /rsvp?eventId=123 HTTP/1.1
Host: events-organizer.com
Authorization: Bearer AbCdEf123456
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/1.0 (KHTML, like Gecko; Gmail Actions)

rsvpStatus=YES

строка "AbCdEf123456" в приведенном выше примере-это маркер авторизации на предъявителя. Это криптографический маркер, созданный сервером аутентификации. Все токены предъявителя, отправленные с действиями, имеют поле проблема, а поле аудитория указывает домен отправителя в виде URL вида https://. Например, если письмо от noreply@example.com, аудитория https://example.com.

при использовании токенов носителя убедитесь, что запрос поступает с сервера аутентификации и предназначен для домена отправителя. Если маркер не проверяет, служба должна ответить на запрос с кодом ответа HTTP 401 (несанкционированный).

токены на предъявителя являются частью стандарта OAuth V2 и широко принят многими API.

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

но ваш вопрос, похоже, пытается найти ответы на функциональность токена носителя:

предположим, что я реализую поставщика авторизации, могу ли я поставьте любое вид строки для токена на предъявителя? Может ли это быть случайная строка? Делает это должна быть кодировка base64 некоторых атрибутов ? Должно ли это быть хеш?

Итак, я попытаюсь объяснить, как работают токены на предъявителя и токены обновления:

когда пользователь запрашивает сервер для отправки токена пользователя и пароля через SSL, сервер возвращает две вещи:маркер доступа и маркер.

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

Authorization: Bearer <access_token>

маркер доступа представляет собой зашифрованную строку со всеми свойствами пользователя, утверждениями и ролями, которые вы хотите. (Можно проверить, что размер маркера увеличивается при добавлении дополнительных ролей или утверждений). Как только сервер ресурсов получит токен, он сможет расшифровать его и прочитать эти свойства пользователя. Таким образом, пользователь будет проверен и предоставлен по всем приложение.

маркеры доступа имеют короткий срок действия (т. е. 30 минут). Если бы токены доступа имели длительный срок действия, это было бы проблемой, потому что теоретически нет возможности отменить его. Итак, представьте себе пользователя с ролью= "Admin", которая изменяется на"User". Если пользователь сохраняет старый токен с ролью= "Admin", он сможет получить доступ до истечения срока действия токена с правами администратора. Вот почему маркер доступа имеет короткий срок действия.

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

обновления хранятся в БД и будет иметь длительный срок действия (например: 1 месяц).

пользователь может получить новый токен доступа (когда он истекает, например, каждые 30 минут), используя токен обновления, который пользователь получил в первом запросе токена. Когда срок действия маркера доступа истекает, клиент должен отправить маркер обновления. Если этот токен обновления существует в БД, сервер вернет клиенту новый токен доступа и другой токен обновления (и заменит старый токен обновления на новый).

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

токен на предъявителя - это одно или несколько повторений алфавита, цифры," -",".", "_" , "~" , "+" , "/" затем следует 0 или более "=".

RFC 6750 2.1. Поле Заголовка Запроса На Авторизацию (формат ABNF (дополненный BNF))

The syntax for Bearer credentials is as follows:

     b64token    = 1*( ALPHA / DIGIT /
                       "-" / "." / "_" / "~" / "+" / "/" ) *"="
     credentials = "Bearer" 1*SP b64token

похоже на Base64, но согласно должен ли токен в заголовке быть закодирован base64?, это не так.

копать немного глубже в "HTTP / 1.1, часть 7: Идентификация"**, однако я вижу, что b64token-это просто определение синтаксиса ABNF учитывая символы, обычно используемые в base64, base64url и т. д.. Так b64token не определяет никакого кодирования или декодирования, а просто определяет, какие символы могут использоваться в части авторизации заголовок, который будет содержать маркер доступа.

ссылки