Биржа токенов: Криптовалюты и токены: курс, капитализация, объёмы торгов

Содержание

Топ-100 сегодняшних цен и данных на токены

Объяснение различных типов крипто токенов и вариантов их использования

  • Крипто токены отличаются от альткойнов или монет.
  • Крипто токены — это цифровые активы, которые представляют собой определенный вариант использования или актив, размещенный на блокчейне.
  • Существуют разные типы токенов, созданные для решения определенных задач.

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

Что такое крипто токены?

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

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

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

Токены протокола (protocol tokens)

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

Самыми популярными токенами платформы являются токены на основе Ethereum, а также NEO, ICON и EOS. Например, токены стандарта ERC-20 (Synthetix и Theta), токены стандарта ERC-223 (Chainlink и Energy Web Token) и токены стандарта ERC-721 (CryptoKitties и Axie Infinity) — это некоторые из токенов платформы, выпущенных на блокчейне Ethereum.

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

Служебные токены (utility tokens)

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

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

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

Токенизированные активы (security tokens)

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

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

Стейблкоины

Стейблкоины — это особый тип токенов, разработанный с фиксированной ценой независимо от цены ETH и других криптовалют. Обычно они поддерживаются фиатными валютами и торгуются со своей валютной парой в соотношении 1:1. Самым популярным стейблкоином сейчас является Tether, поддерживаемый долларами США.

Транзакционные токены (transactional tokens)

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

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

Коллекционные токены и токены вознаграждения (collectibles and reward tokens)

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

CryptoKitties — это известный цифровой коллекционный токен, выдаваемый участникам игры, а Medipedia Point Rewards (MPR) — это токен, который выдается поставщикам услуг на основе отзывов, которые они получают на платформе.

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

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

Не криптовалюты. У каких бирж есть свои токены и зачем они нужны :: РБК.Крипто

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

В середине ноября южнокорейская биржа Bithumb объявила о планах по выпуску собственного токена на блокчейне Bithumb Chain. 300 млн токенов будут распределены между пулами стимулирования пользователей и развития сети. В компании заявили, что альткоин станет средством оплаты биржевых сборов, комиссий за транзакции и прав на использование систем торговой площадки.

Другие крупные биржи уже имеют собственные токены, некоторые из них более успешные и даже входят в топ-20 криптовалют по капитализации. Рассказываем о пяти самых популярных биржевых монетах.

Собственный токен криптовалютной биржи BitMax, который был запущен в 2019 году, предназначен исключительно для использования на платформе. Он не дает никаких прав собственности, обещаний держателям выплат, дивидендов и так далее. Основные функции BTMX: участие в IEO-проектах на BitMax и приобретение VIP-членства разного уровня, которое дает скидку на комиссии за транзакции и увеличивает суточный лимит BTMX для чистой продажи.

На данный момент капитализация токена составляет $55,5 млн.

При этом его объемы торгов — $3 млн.

В январе прошлого года биржа OKEx запустила собственный утилитарный токен OKB, который базируется на стандарте ERC-20. В ближайшие недели должен состояться запуск основной сети блокчейна OKChain, на него переведут монету компании.

Сейчас альткоин представлен не только на OKEx, но и на Bitfinex. Руководители проекта обещают, что в дальнейшем OKB появится и на других биржах. Как и на других площадках, для участия в IEO пользователи должны держать OKB на своих счетах. Период хранения составляет 15 дней.

Рыночная капитализация монеты OKB на данный момент — $66 млн. Ее торговые объемы достигают $102 млн.

Собственный токен биржи Huobi Pro предназначен для снижения торговых комиссий пользователей и участия в IEO-проектах на платформе Huobi Prime. Также держатели монеты могут принимать участие в различных программах голосований.

Капитализация альткоина составляет $934 млн при торговых объемах в $80 млн.

Криптовалюта KuCoin Shares работает по тому же принципу, что и монеты других бирж. Она была запущена 2 сентября 2017 года, при использовании KSC можно получить скидку на торговые комиссии. Токен подходит ко всем Ethereum-кошелькам, так как является монетой стандарта ERC-20.

Монету необходимо держать на счете для того, чтобы получить возможность принять участие в IEO. Краудсейлы на площадке проходят в формате лотереи — пользователи получают определенное количество билетов, на каждый из которых можно приобрести новые монеты на $500.

Сейчас капитализация KCS составляет $99 млн, а объемы торгов — $6 млн.

Самый успешный биржевой токен запустила в 2017 г. компания Binance. Сейчас монета BNB входит в десятку крупнейших цифровых денег по капитализации, в основном она используется пользователями для участия в IEO на платформе Binance Launchpad, а также для получения скидок на торговые комиссии и других бонусов.

Binance Coin — одна из немногих монет, которая смогла обновить исторические максимумы стоимости после 2018 года. В начале июня цена монеты достигла отметки в $39,3, тогда как в январе прошлого года курс на пике составил $23.

Сейчас альткоин стоит $22, его капитализация на данный момент составляет $3,3 млрд. При этом суточные объемы торгов находятся на уровне в $240,7 млн.

Стоимость биржевых токенов зависит от успеха компании, ее политики и продукции.

Подобные активы больше похожи на ценные бумаги по своим свойствам, чем на криптовалюты.

Автор

Денис Давыдов-Громадин

Биржа Binance бесплатно раздала криптовалюту своим пользователям :: РБК.Крипто

Торговая площадка начислила по 100 токенов TWT клиентам, которые совершили хотя бы одну сделку за последнюю неделю

Биржа Binance провела крупнейшую раздачу токенов TWT, выпущенных мобильным кошельком для хранения криптовалюты Trust Wallet. В общей сложности, торговая платформа бесплатно распределила среди пользователей монеты на миллионы долларов, о чем сообщила в пресс-релизе. Точное количество монет не раскрывается.

Токены TWT получили пользователи, которые совершили хотя бы одну сделку на спотовой или фьючерсной платформе с 14 по 21 декабря 2020 года. Клиентам досталось по 100 монет. По текущему курсу в $0,14 их стоимость составляет $14.

Пользователи не смогут продать полученные токены на самой бирже Binance. Их необходимо будет вывести до 5 января следующего года. Если этого не сделать до назначенного времени, криптовалюта будет удалена с кошельков трейдеров.

Слухи о возможной раздаче монет появились вчера, 21 декабря. Некоторые пользователи выложили скриншоты, что на их кошельки было начислено по 100 TWT. Сразу после этого курс криптовалюты начал стремительно расти. За последние сутки он поднимался с $0,093 до $0,18, но сразу после публикации новости на официальном сайте Binance упал ниже $0,14.

Кошелек Trust Wallet принадлежит Binance. Площадка приобрела проект в 2018 году. На данный момент мобильное приложение скачали более 5 млн раз.

12 декабря в эирдропе (бесплатной раздаче криптовалюты) могли поучаствовать держатели токенов XRP. В тот день многие торговые площадки провели снимок балансов инвесторов, хранящих монету на биржевых кошельках. Теперь пользователи смогут получить новый токены SPARK (FLR), распределение произойдет после запуска проекта.

— После твита Илона Маска цена Dogecoin выросла почти на 30%

— SEC готовит иск против Ripple. Цена токена XRP уже упала на 18%

— Инвестор допустил ошибку при отправке биткоинов и потерял $80 тыс.

Больше новостей о криптовалютах вы найдете в нашем телеграм-канале РБК-Крипто.

Автор

Дмитрий Фомин

Топ-5 биржевый токена, на которые стоит обратить внимание

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

Токен BNB

Токен криптовалютной биржи Binance, который сегодня активно торгуется не только на этой площадке, но и на многих других биржах. Стоимость токена составляет $23,27, а рыночная капитализация превышает $3,3 млрд. Токен был запущен в обращение еще в 2017 году и представляли собой монету класса ERC-20. В апреле 2019 года с запуском основной сети Binance Chain токен был перенесен на другой блокчейн, и сегодня монета относится к классу BEP2 BNB.

Как использовать:

  • инвестиционный инструмент. Согласно данных CoinMarketCap, рентабельность инвестиций в монету превышает 9000%;
  • в качестве платежного средства на площадке. За токены можно покупать другие монеты или оплачивать комиссию;
  • в качестве торгового инструмента.

Совсем недавно BeInCrypto сообщал, что кто-то случайно сжег токены BNB на $20 000, но биржа помогла пользователю решить проблему.

Токен NMX

Внутренний токен российской криптовалютной биржи Nominex, который пока является внутренним инструментом. Токен класса ERC-20 может использоваться в качестве платежного инструмента или же инвестиционного актива. Это служебный токен, который не дает право долю в компании, но вполне может использоваться для оплаты определенных услуг. NMX можно не только приобрести на бирже за $1, но и получить в подарок от площадки или выиграть во время демо или реал-турнира для трейдеров.

Как использовать:

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

Токен HT

Токен криптовалютной биржи Huobi – это полноценное платежное средство. HT доступен в торговых парах с ведущими криптомонетами и DeFi-токенами. Стоимость монеты составляет $4,53, а общая капитализация превышает $950 млн. Рентабельность инвестиций в монету оценивается на уровне 202%.

Недавно криптовалютная биржа объявила о расширении своего пристутствия в России.

Как использовать:

  • для покупки ежемесячных планов VIP-статуса;
  • оплачивать скидки на комиссии;
  • принимать участие в голосовании по развитию платформы;
  • получать ранний доступ к закрытым мероприятиям биржи;

Токен OKB

Токен криптовалютной бирже ОКЕх, стоимость которого сегодня составляет $6,24, а капитализация превышает $347 млн. Рентабельность инвестиций в токен оценивается на уровне 294,76%.

Как использовать:

  • для оплаты комиссий на бирже;
  • для покупки криптовалюты;
  • для инвестирования.

Токен Waves

Это внутренний токен криптовалютной биржи Waves. Токен класса ERC-20 торгуется сегодня на уровне $2,22, а его общая капитализация превышает $229 млн. Монета может использоваться в качестве платежного средства и инвестиционного актива. Сегодня с токеном Waves созданы 160 торговых пар, включая пары с биткоином, ЕТН и другими монетами.

Как использовать:

  • покупать другие монеты;
  • оплачивать комиссии;
  • использовать в качестве инвестиционного актива;

Кроме того, недавно российский Экспобанк выдал первый кредит под залог токенов Waves.

Ранее BeInCrypto рассказывал о токенах, которые могут заменить USDT.

Дисклеймер

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

Как создать свой NFT-токен — Крипто на vc.

ru

Сейчас во всех новостях инфо про невзаимозаменяемые токены. Я вот подумал, почему бы лого своей компании не «запатентовать» таким методом.

96 258 просмотров

Самый популярный NFT Nyan Cat Chris Torres

Оказалось, что это совсем не сложно.

Итого, чтобы создать свой nft-токен, нужны:

  • Кошелек Ethereum (Meta Mask или другой)/
  • Сайт opensea. io.
  • Сам контент, который хотите в токен записать

Выбираем: Create/My collections

Если вы не зарегистрированы, вылезет окно, что нужно войти через кошелек эфира. Чтобы добавить токен, нужно создать коллекцию: жмем «Create».

Добавляем лого коллекции, имя коллекции и описание:

Коллекция создана! Можно добавлять элементы (сами токены): жмем здесь «Add items», а в следующем окне «Add new item».

Наконец мы на финальном этапе! Добавляем медиафайл, который хотите записать в токен. Это может быть картинка, видео, 3D-модель, звук. Допустимые форматы JPG, PNG, GIF, SVG, MP4, WEBM, MP3, WAV, OGG, GLB, GLTF. Не более 100 МБ. Также добавляем название токена.

Ниже можем добавить ссылку и описание:

Далее можно добавить к токену различные характеристики. Также можно добавить заблокированный контент, который может увидеть только покупатель (владелец данного токена). Далее указывается количество экземпляров, в котором выпускается токен (по умолчанию 1). Жмем «Create».

Токен создан! Пару дней он находится на верификации (проверке подлинности). Далее его можно продать, если хотите. Для этого жмем «Sell»

Обычно на Opensea продажи проводятся в формате аукциона. Не буду вдаваться в подробности размещения на продажу. Тут много настроек, сами видите по скриншоту ниже. Я просто выбрал начальную цену для своего токена в 0,01 Eth (эфира). В итоге жмем Post Your Lusting:

Ну и вот. В данный момент размещение на продажу стоит 77,59 в долларах США. Оно зависит от стоимости комиссии за транзакцию, которая называется GAS FEE. Сейчас 8 вечера. Где-то в 3 часа дня размещение стоило $40. Говорят, в 5–6 утра (но по чьему времени?) он дешевле. Если у вас есть желание разместиться и деньги на эфирном счету, жмем подтвердить.

Сейчас многие художники продают за довольно большие деньги и быстро свои работы на этом ресурсе, что даже комиссия окупается 🙂

Ну а я пока просто разместил свой лого в токене.

Не биткоином единым. Аналитики назвали 10 перспективных токенов — Секрет фирмы

Материал не является индивидуальной инвестиционной рекомендацией.

Что происходит

Суммарная капитализация рынка криптовалют на этой неделе впервые в истории пробила отметку в $2 трлн. По этому показателю 5 апреля он приблизился к Apple ($2,15 трлн) и обошёл Microsoft ($1,88 трлн).

Эксперты называют этот рост беспрецедентным: ещё в начале 2021 года капитализация рынка криптовалют едва достигала $1 трлн, то есть показатель удвоился всего за три месяца.


Что такое рыночная капитализация?

Это стоимость объекта (ценной бумаги, компании или даже крипты), рассчитанная на основе текущей рыночной цены. В нашем случае — суммарная рыночная стоимость токенов, которые обращаются на рынке.


Большая заслуга этом рекорде у биткоина, на который приходится половина от общей стоимости всех криптовалют — $1,098 трлн.

Но, несмотря на рекорды, этот рынок знатно лихорадит: уже 7 апреля курс битка снизился до $55 600, из-за чего трейдеры лишились $613 млн.

Изрядно понервничать игроков рынка заставил и Ethereum — второй по капитализации токен, на который приходится $241,7 млрд. Во вторник 6 апреля альткоин (так называют все криптовалюты, кроме биткоина. — Прим. «Секрета») обновил исторический максимум стоимости выше $2100, после чего начал дешеветь. А трейдеры лишились $283 млн.

Топ-3 по капитализации замыкает Binance Coin с оценкой в $57,22 млрд. В отличие от своих собратьев этот токен находится на взлёте: 6 апреля его цена обновила исторический максимум выше $400. Ещё в начале 2021 года Binance Coin торговался на уровне $38, так что за четыре месяца он подорожал на 955%.

Резкий рост доходности отмечается и у токена XRP — криптовалюта компании Ripple за три месяца выросла в цене на 580% и вернулась в топ-4 по капитализации. Почти такой же рост показал токен IOTA, который за последние три месяца подорожал на 573%.

Означает ли это, что традиционная крипта постепенно начинает сдавать свои позиции, а будущее — за альтернативными токенами? Текущая капитализация биткоина, как и его доля на рынке, выглядит чрезмерной, считает управляющий партнёр Advice Finance, финансовый архитектор Сергей Смит. По прогнозам эксперта, первая криптовалюта может достаточно быстро обесцениться на 30% или более, как это уже с ней бывало.

«На грядущей коррекции доля биткоина на рынке будет снижаться, а доля системных альтернативных криптоактивов — расти. Краткосрочно до середины — конца 2021 можно воздержаться от активной покупки криптоактивов и только на активных снижениях можно присматриваться к покупке», — считает Смит.

Так на какие из них можно обратить внимание?

Топ-7 альткоинов, которые принесут наибольшую прибыль в 2021 году

Cardano (ADA)

Это децентрализованный протокол, который стремится восполнить недостатки Ethereum. Cardano использует систему PoS (Proof-of-Stake — доказательство доли владения) вместо PoW (Proof-of-Work — доказательство выполнения работы). Это означает, что валюта не потребляет так много энергии, как Bitcoin и Ethereum. За стейкинг Cardano также можно получать награды, обычно около 5%.

Валюту часто недооценивают, поскольку она еще не поддерживает смарт-контракты и встроенные токены. Однако эти функции должны появиться в скором времени, что сделает Cardano серьезной угрозой для Ethereum.

Ниже представлены другие интересные особенности.

  • Более 50% кошельков Cardano участвуют в стейкинге.
  • Эта валюта намного более децентрализована, чем Ethereum.
  • В большинстве случаев денежный оборот Cardano выше, чем у Ethereum.
  • Некоторые факты указывают на то, что Илон Маск связан с Cardano.

Материалы по теме:
Что такое Cardano и почему ее называют альтернативой Ethereum
Инвестиции в биткоин: какие факторы нужно учесть

Рекомендуемые биржи: Binance и Crypto.com.

Enjin (ENJ)

Enjin позволяет внедрить NFT-токены и криптовалюты в любую видеоигру, включая Minecraft.

Minecraft был невероятно популярен в прошлом и все еще остается на волне успеха, постоянно появляясь в трендах Twitter и собирая сотни тысяч зрителей на стримах Twitch. Интеграция NFT-токенов в сервера Minecraft принесет большие выгоды и приток пользователей для Enjin.

Рекомендуемые биржи: Binance и Crypto.com.

Uniswap (UNI)

Это децентрализованная биржа для торговли практически любым токеном ERC-20. Однако из-за высоких цен на газ Ethereum перевод токенов Uniswap обходится достаточно дорого. Газ — это единица оплаты транзакций в блокчейне Ethereum.

В ближайщее время это должно измениться: Ethereum 2.0 будет работать по системе Proof-of-Validation, что снизит стоимость газа. Кроме того, согласно слухам, требования к майнингу Ethereum будут изменены, что позволит людям вновь использовать Uniswap. С учетом этих факторов UNI-токен будет продолжать расти.

Рекомендуемые биржи: Gemini, Binance, Coinbase и Crypto.com.

Litecoin (LTC)

Многие рассматривают Litecoin как «серебро» мира криптовалют, в то время как золотом считается Bitcoin. Litecoin — это альтернативный способ хранения значения Bitcoin. Несмотря на то, что этой валюте не хватает многих стандартных функций, есть две причины смотреть на нее оптимистично.

  • Это удобный способ перевода средств из-за низких комиссий и достаточно широкой распространенности. Тот факт, что валюта не привлекает к себе много внимания, также говорит о ее потенциальной стабильности в будущем. Кроме того, Litecoin поддерживается PayPal. В этом квартале платежная система позволит проводить расчеты в криптовалютах со своими продавцами, что может повысить спрос на Litecoin.
  • В настоящее время разрабатывается функция конфиденциальности. Это позволит совершать как публичные, так и частные транзакции. Таким образом Litecoin станет единственной из 10 ведущих криптовалют, поддерживающей встроенные частные переводы. Кроме того, она доступна практически в каждой криптобирже.

На данный момент Litecoin также работает над партнерством с Cardano, что потенциально может привести к еще большему росту.

Litecoin поддерживает практически каждая биржа.

Binance (BNB)

Валюта Binance запущена одноименной криптовалютной платформой и построена на основе сети Binance, конкурента экосистемы Ethereum. Совсем недавно Binance стала третьей по величине криптовалютой по рыночной капитализации.

Несмотря на потенциал дальнейшего роста, с Binance стоит быть осторожнее. Прежде чем вкладываться, дождитесь снижения ее стоимости.

Рекомендуемые биржи: Binance и Crypto.com.

Filecoin (FILE)

Это один из самых уникальных криптопроектов: он позволяет пользователям хранить файлы через блокчейн. Потенциально эту технологию можно задействовать во многих направлениях — от децентрализованных облачных хранилищ до сетей CDN.

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

Рекомендуемые биржи: Gemini и Crypto.com.

Crypto.com (CRO)

Владельцы токена CRO от стартапа Crypto.com могут оформить платежную карту, позволяющую получать более высокие вознаграждения и прочие преимущества.

Crypto.com был запущен еще в 2016 году, и за последние два года он наблюдал значительный рост. С текущими темпами платформа может с легкостью обогнать Binance и Coinbase. Увеличение числа пользователей валюты в конечном счете приведет к росту ее стоимости и спроса.

Кроме того, при получении карты пользователи должны поставить токены CRO на определенный период времени, тем самым выводя их из обращения. Чтобы сократить запас еще сильнее, в феврале Crypto.com также сожгла крупнейшее число токенов в истории криптовалют, а именно 70 млрд CRO. Такие действия несомненно помогут поднять их цену.

Рекомендуемые биржи: Crypto.com.

Прочие альткойны

Помимо вышеперечисленных, также стоит обратить внимание на следующие криптовалюты.

  • Aave (AAVE) позволяет оформлять децентрализованные кредиты и быстрые займы.
  • 1Inch (1INCH) аналогична Uniswap, но всегда по более выгодной цене.
  • Polkadot (DOT) — еще один возможный «убийца» Ethereum со своими интересными возможностями.
  • Pancake Swap (CAKE) — аналог Uniswap в сети Binance.
  • Chainlink (LINK) соединяет реальный мир с криптовалютным.

Источник.

Фото на обложке: Wit Olszewski / Shutterstock

rfc8693

 Инженерная группа Интернета (IETF) М. Джонс
Запрос комментариев: 8693 Надалин А.
Категория: Стандарты Track Microsoft
ISSN: 2070-1721 Б. Кэмпбелл, изд.
                                                           Ping Identity
                                                              Дж.  Брэдли
                                                                  Юбико
                                                            С.Мортимор
                                                                    Виза
                                                            Январь 2020


                        Обмен токенов OAuth 2.0

Абстрактный

   Эта спецификация определяет протокол для HTTP и JSON на основе
   Служба токенов безопасности (STS), определяя, как запрашивать и получать
   токены безопасности с серверов авторизации OAuth 2.0, включая
   маркеры безопасности, использующие олицетворение и делегирование.

Статус этой памятки

   Это документ Internet Standards Track.Этот документ является продуктом Инженерной группы Интернета.
   (IETF). Он представляет собой консенсус сообщества IETF. Оно имеет
   получил публичное рецензирование и был одобрен к публикации
   Инженерная группа управления Интернетом (IESG). Дополнительная информация о
   Интернет-стандарты доступны в разделе 2 RFC 7841. 

   Информация о текущем статусе этого документа, исправлениях,
   а о том, как оставить отзыв, можно узнать по адресу
   https://www.rfc-editor.org/info/rfc8693.Уведомление об авторских правах

   Авторские права (c) 2020 IETF Trust и лица, указанные в качестве
   авторы документа. Все права защищены.

   Этот документ подпадает под действие BCP 78 и Правового регулирования IETF Trust.
   Положения, касающиеся документов IETF
   (https://trustee.ietf.org/license-info) действует на дату
   публикация этого документа. Пожалуйста, просмотрите эти документы
   внимательно, поскольку они уважительно описывают ваши права и ограничения
   к этому документу. Компоненты кода, извлеченные из этого документа, должны
   включить упрощенный текст лицензии BSD, как описано в разделе 4.е из
   Правовые положения Trust и предоставляются без гарантии, как
   описано в упрощенной лицензии BSD.

Оглавление

   1. Введение
     1.1. Семантика делегирования и олицетворения
     1.2. Обозначения и условные обозначения требований
     1. 3. Терминология
   2. Запрос и ответ на обмен токенами
     2.1. Запрос
       2.1.1. Взаимосвязь между ресурсом, аудиторией и масштабом
     2.2. Ответ
       2.2.1. Успешный ответ
       2.2.2. Ответ об ошибке
     2.3. Пример обмена токенов
   3.Идентификаторы типа токена
   4. Заявки на веб-токены JSON и параметры ответа самоанализа
     4.1. "act" (Актер) Претензия
     4.2. Заявление "scope" (Scopes)
     4.3. Заявление "client_id" (идентификатор клиента)
     4.4. Заявление "may_act" (Уполномоченный участник)
   5. Соображения безопасности
   6. Соображения о конфиденциальности
   7. Соображения IANA
     7.1. Регистрация URI OAuth
     7.2. Регистрация параметров OAuth
     7.3. Регистрация типа токена доступа OAuth
     7.4. Регистрация заявок на веб-токены JSON
     7.5. Регистрация ответа самоанализа токена OAuth
   8. Ссылки
     8.1. Нормативные ссылки
     8.2. Информативные ссылки
   Приложение A. Дополнительные примеры обмена токенами
     А.1. Пример обмена токенами олицетворения
       А. 1.1. Запрос на обмен токена
       А.1.2. Предметные претензии по токенам
       А.1.3. Ответ обмена токенов
       А.1.4. Выпущенные токены
     А.2. Пример обмена токенами делегирования
       А.2.1. Запрос на обмен токена
       А.2.2. Предметные претензии по токенам
       А.2.3. Заявки на токены актера
       А.2.4. Ответ обмена токенов
       А.2.5. Выпущенные токены
   Благодарности
   Адреса авторов

1. Введение

   Маркер безопасности - это набор информации, облегчающий совместное использование
   идентификационной информации и информации о безопасности в гетерогенных средах или
   через домены безопасности. Примеры токенов безопасности включают JSON
   Веб-токены (JWT) [JWT] и язык разметки утверждений безопасности (SAML)
   Утверждения 2.0 [OASIS.saml-core-2.0-os]. Жетоны безопасности
   обычно подписывается для достижения целостности, а иногда также зашифровывается для
   добиться конфиденциальности.Токены безопасности также иногда
   описываются как утверждения, например, в [RFC7521]. 

   Служба токенов безопасности (STS) - это служба, способная проверять
   предоставленные ему токены безопасности и выпуск новых токенов безопасности в
   ответ, который позволяет клиентам получить соответствующий доступ
   учетные данные для ресурсов в гетерогенных средах или в разных
   домены безопасности. Клиенты веб-служб использовали WS-Trust [WS-Trust]
   как протокол для взаимодействия с STS для обмена токенами. Пока
   WS-Trust использует XML и SOAP, тенденция современной веб-разработки
   был к шаблонам RESTful (репрезентативная передача состояния) и
   JSON.Платформа авторизации OAuth 2.0 [RFC6749] и OAuth 2.0
   Токены на предъявителя [RFC6750] стали популярными стандартами для
   авторизация доступа сторонних приложений к HTTP и RESTful
   Ресурсы. Обычное взаимодействие OAuth 2.0 включает
   обмен некоторого представления авторизации владельца ресурса на
   токен доступа, который оказался чрезвычайно полезным шаблоном
   на практике. Однако его ввод и вывод несколько слишком
   ограничены как есть, чтобы полностью приспособить обмен токенами безопасности
   фреймворк. Эта спецификация определяет протокол, расширяющий OAuth 2.0, который
   позволяет клиентам запрашивать и получать токены безопасности от
   серверы авторизации, выступающие в роли STS. Похоже на OAuth
   2.0, эта спецификация фокусируется на простоте клиентского разработчика и
   требуется только HTTP-клиент и парсер JSON, которые почти
   повсеместно доступны в современных средах разработки. СТС
   протокол, определенный в этой спецификации, сам по себе не является RESTful (STS
   не особенно хорошо поддается подходу REST), но делает
   использовать шаблоны связи и форматы данных, которые должны быть
   знакомы разработчикам, привыкшим к работе с системами RESTful.Новый тип предоставления для запроса на обмен токенами и связанный с ним
   конкретные параметры для такого запроса к конечной точке токена:
   определяется данной спецификацией. Ответ на обмен токенами - нормальный
   Ответ OAuth 2.0 от конечной точки токена с несколькими дополнительными
   параметры, определенные здесь, для предоставления информации клиенту. 

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

   Объем данной спецификации ограничен определением
   базовый протокол запроса и ответа для обмена токенами в стиле STS
   с использованием OAuth 2.0. Хотя несколько новых заявлений JWT определены, что
   позволяет выражать семантику делегирования, конкретный синтаксис,
   семантика и характеристики безопасности самих токенов
   (как представленные серверу авторизации, так и полученные
   клиентом) явно выходят за рамки, и никакие требования не
   размещены на модели доверия, в которой реализация может быть
   развернут.  Дополнительные профили могут содержать более подробные требования
   вокруг специфики сторон и вовлеченных доверительных отношений, таких как
   требуется ли подписание и / или шифрование токенов, или если требуется подтверждение
   Жетоны владения потребуются или будут выпущены.Однако такие
   детали часто будут политическими решениями, принятыми в отношении
   специфические потребности отдельных развертываний и будут настроены или
   реализовано соответственно.

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

1.1. Семантика делегирования и олицетворения

   Один из распространенных вариантов использования STS (как упоминалось в предыдущем
   раздел), чтобы разрешить серверу ресурсов A совершать вызовы к бэкэнду.
   сервис C от имени запрашивающего пользователя B.В зависимости от местного
   политика сайта и инфраструктура авторизации, может быть желательно для
   A использовать свои собственные учетные данные для доступа к C вместе с аннотацией
   некоторая форма, в которой А действует от имени В («делегирование») или чтобы А
   получить учетные данные с ограниченным доступом к C, но это продолжает
   идентифицировать B как уполномоченный объект («выдача себя за другое лицо»).  Делегация
   и олицетворение могут быть полезными концепциями в других сценариях, связанных с
   также несколько участников.

   Когда принципал A выдает себя за принципала B, A получает все права
   что B имеет определенный контекст прав и
   неотличим от B в этом контексте.Таким образом, когда принципал A
   олицетворяет принципала B, тогда в той мере, в какой любое лицо, получающее такое
   токен обеспокоен, они на самом деле имеют дело с B. Это правда
   что некоторые члены системы идентификации могут знать, что
   выдача себя за другое лицо происходит, но это не требование. Для всех
   намерения и цели, когда A выдает себя за B, A является B в пределах
   контекст прав, разрешенных токеном. Способность А
   олицетворение B может быть ограничено по объему или времени, или даже с одним
   ограничение использования времени, будь то содержание токена или
   внеполосный механизм.Семантика делегирования отличается от семантики олицетворения,
   хотя они тесно связаны. С семантикой делегирования
   принципал A по-прежнему имеет собственную идентичность, отличную от B, и
   ясно понимал, что, хотя B, возможно, делегировал некоторые из своих
   права на A, любые действия предпринимаются A, представляющим B. 
   В некотором смысле A - агент B.

   Делегирование и олицетворение не охватывают все ситуации.
   Когда принципал действует непосредственно от своего имени, например,
   ни делегирование, ни олицетворение не используются.Однако они
   более распространенная семантика, используемая для обмена токенами и, как таковая,
   дается более прямая трактовка в этой спецификации.

   Семантика делегирования обычно выражается в токене путем включения
   информация как об основном предмете токена, так и о
   актер, которому субъект делегировал некоторые из своих прав.
   Такой токен иногда называют составным токеном, потому что он
   состоит из информации о нескольких предметах. Обычно в
   запрос, «subject_token» представляет личность стороны
   от имени которого запрашивается токен, пока
   "токен-актера" представляет собой личность стороны, к которой осуществляется доступ
   делегируются права выпущенного токена.Составной токен
   выданный сервером авторизации будет содержать информацию о
   Обе стороны.  Когда и если выпускается составной токен,
   усмотрение сервера авторизации и применяемой политики и
   конфигурация.

   Особенности представления составного токена и даже то,
   такой токен не будет выпущен в зависимости от деталей
   реализация и вид токена. Представления
   составные токены, которые не являются JWT, выходят за рамки этого
   Технические характеристики.Однако параметр запроса "актер_токен"
   предоставить средства для предоставления информации о желаемом актере,
   а утверждение JWT "act" может предоставить представление цепочки
   делегация.

1.2. Обозначения и условные обозначения требований

   Ключевые слова «ДОЛЖНЫ», «НЕ ДОЛЖНЫ», «ОБЯЗАТЕЛЬНО», «ДОЛЖНЫ», «НЕ ДОЛЖНЫ»,
   «ДОЛЖЕН», «НЕ ДОЛЖЕН», «РЕКОМЕНДУЕТСЯ», «НЕ РЕКОМЕНДУЕТСЯ», «МОЖЕТ» и
   «ДОПОЛНИТЕЛЬНО» в этом документе следует толковать, как описано в
   BCP 14 [RFC2119] [RFC8174] когда и только когда они появляются во всех
   столицы, как показано здесь.1.3. Терминология

   В этой спецификации используются термины «тип токена доступа», «авторизация.
   сервер »,« клиент »,« идентификатор клиента »,« сервер ресурсов »,« токен »
   конечная точка "," запрос токена "и" ответ токена ", определенные OAuth 2.0.
   [RFC6749], а также термины «Кодировка Base64url», «Заявление» и «JWT
   Набор утверждений », определенный с помощью веб-токена JSON (JWT) [JWT].

2. Запрос и ответ на обмен токенами

2.1. Запрос

   Клиент запрашивает токен безопасности, отправляя запрос токена в
   конечная точка токена сервера авторизации с использованием типа предоставления расширения
   механизм, определенный в разделе 4.5 из [RFC6749].

   Аутентификация клиента на сервере авторизации выполняется с помощью
   обычные механизмы, предоставляемые OAuth 2.0. Раздел 2.3.1 [RFC6749]
   определяет аутентификацию клиента на основе пароля, однако клиент
   аутентификация расширяема, и возможны другие механизмы. Для
   Например, [RFC7523] определяет аутентификацию клиента с использованием несущего JSON
   Веб-токены (JWT) [JWT]. Поддерживаемые методы клиента
   аутентификации и разрешать или запрещать неаутентифицированные или
   неопознанные клиенты - это решения о развертывании, которые
   усмотрение сервера авторизации.Обратите внимание, что без учета клиента
   аутентификация позволяет использовать скомпрометированный токен через
   STS в другие токены любым владельцем скомпрометированного токена.
   Таким образом, аутентификация клиента допускает дополнительную авторизацию.
   проверки STS относительно того, каким организациям разрешено олицетворять
   или принимать делегации от других организаций.

   Клиент отправляет запрос на обмен токена в конечную точку токена с
   тип предоставления расширения с использованием метода HTTP «POST». Следующие
   параметры включаются в тело объекта HTTP-запроса с помощью
   формат "application / x-www-form-urlencoded" с кодировкой символов.
   UTF-8, как описано в Приложении B [RFC6749].grant_type
      ОБЯЗАТЕЛЬНЫЙ. Значение urn: ietf: params: oauth: grant-type: token-
      exchange "указывает на то, что выполняется обмен токена.

   ресурс
      ПО ЖЕЛАНИЮ. URI, указывающий на целевую службу или ресурс.
      где клиент намеревается использовать запрошенный токен безопасности.
      Это позволяет серверу авторизации применять политику как
      подходит для цели, например, определение типа и
      содержание токена, который будет выпущен, или если и как должен быть выпущен токен
      зашифрованный.Во многих случаях клиент не знает
      логическая организация систем, с которыми он взаимодействует и
      будет знать только URI сервиса, в котором он намеревается использовать
      токен. Параметр "ресурс" позволяет клиенту указать
      сервер авторизации, на котором он намеревается использовать выданный токен
      путем указания местоположения, обычно в виде URL-адреса https, в токене
      запрос на обмен в той же форме, которая будет использоваться для доступа к этому
      ресурс.Сервер авторизации обычно имеет
      возможность сопоставить значение URI ресурса с подходящим
      политика. Значение параметра «ресурс» ДОЛЖНО быть абсолютным.
      URI, как указано в разделе 4.3 [RFC3986], МОЖЕТ включать
      компонент запроса и НЕ ДОЛЖЕН включать компонент фрагмента.
      Можно использовать несколько параметров «ресурса», чтобы указать, что
      выпущенный токен предназначен для использования на нескольких ресурсах
      перечисленные. См. [OAUTH-RESOURCE] для дополнительной информации и использования
      параметра "ресурс".аудитория
      ПО ЖЕЛАНИЮ. Логическое имя целевой службы, в которой клиент
      намеревается использовать запрошенный токен безопасности. Это служит
      назначение аналогично параметру "ресурс", но с клиентом
      предоставление логического имени целевой службе. Интерпретация
      имени требует, чтобы значение было таким, чтобы оба
      клиент и сервер авторизации понимают. Клиент OAuth
      идентификатор, идентификатор объекта SAML [OASIS.saml-core-2.0-os] и
      идентификатор эмитента OpenID Connect [OpenID.Core] являются примерами
      вещи, которые могут быть использованы в качестве значений параметра "аудитория".
      Однако значения "аудитории", используемые с данным сервером авторизации
      должны быть уникальными на этом сервере, чтобы гарантировать, что они правильно
      интерпретируется как предполагаемый тип значения. Множественная «аудитория»
      параметры могут использоваться, чтобы указать, что выданный токен
      предназначен для использования в нескольких перечисленных аудиториях. В
      параметры "аудитория" и "ресурс" могут использоваться вместе для
      указать несколько целевых служб с сочетанием логических имен и
      URI ресурсов.сфера
      ПО ЖЕЛАНИЮ. Список строк, разделенных пробелами и чувствительных к регистру, как
      определено в разделе 3.3 [RFC6749], что позволяет клиенту
      укажите желаемую область запрашиваемого токена безопасности в
      контекст службы или ресурса, в котором будет использоваться токен.
      Значения и связанная с ними семантика области действия зависят от службы.
      и ожидается, что будет описано в соответствующем сервисе
      документация.

   required_token_type
      ПО ЖЕЛАНИЮ. Идентификатор, как описано в разделе 3, для типа
      запрошенного токена безопасности.Если запрошенный тип
      не указано, тип выпущенного токена остается на усмотрение
      сервер авторизации и может быть продиктован знанием
      требования службы или ресурса, указанные
      параметр "ресурс" или "аудитория".

   subject_token
      ОБЯЗАТЕЛЬНЫЙ. Маркер безопасности, представляющий личность
      сторона, от имени которой делается запрос. Обычно
      субъект этого токена будет субъектом токена безопасности
      выдается в ответ на запрос.subject_token_type
      ОБЯЗАТЕЛЬНЫЙ. Идентификатор, описанный в разделе 3, который
      указывает тип токена безопасности в "subject_token"
      параметр.

   Actor_token
      ПО ЖЕЛАНИЮ. Маркер безопасности, представляющий личность
      действующая партия. Обычно это вечеринка,
      уполномочен использовать запрошенный токен безопасности и действовать от имени
      предмета.

   act_token_type
      Идентификатор, как описано в разделе 3, который указывает тип
      токена безопасности в параметре "actor_token ".Это
      ОБЯЗАТЕЛЬНО, если параметр "токен-актера" присутствует в
      запрос, но НЕ ДОЛЖЕН быть включен в противном случае.

   При обработке запроса сервер авторизации ДОЛЖЕН выполнить
   соответствующие процедуры проверки для указанного типа токена и,
   если присутствует жетон актера, также выполните соответствующие
   процедуры проверки для указанного типа токена. Действительность
   критерии и детали любого конкретного токена выходят за рамки
   этот документ и относятся к соответствующему типу токена и
   его содержание.При отсутствии одноразового использования или другой семантики, специфичной для
   тип токена, процесс обмена токенами не влияет на
   действительность предметного токена или токена субъекта. Кроме того,
   обмен является разовым мероприятием и не создает тесной увязки
   между входными и выходными токенами, так что (например) в то время как
   срок действия выходного токена может зависеть от
   входной токен, обновление или продление входного токена не ожидается
   для отражения в свойствах выходного токена.Это все еще может быть
   подходит или желательно для распространения событий отзыва токена.
   Однако это не является общим свойством протокола STS и
   будет зависеть от конкретной реализации, типа токена или
   развертывание.

2.1.1. Взаимосвязь между ресурсом, аудиторией и масштабом

   При запросе токена клиент может указать желаемую цель
   сервис (ы), где он намеревается использовать этот токен посредством
   параметры "аудитория" и "ресурс", а также указать желаемый
   область запрашиваемого токена с помощью параметра "scope".В
   семантика такого запроса заключается в том, что клиент запрашивает токен
   с запрошенной областью, которая может использоваться на всех запрошенных целевых объектах
   Сервисы. Фактически, запрошенные права доступа токена
   Декартово произведение всех объемов на все целевые службы.

   Сервер авторизации может не желать или неспособен выполнить какие-либо
   токен запроса, но вероятность невыполнения запроса составляет
   значительно выше при очень широких правах доступа
   просил.Таким образом, при отсутствии конкретных знаний о
   взаимосвязь систем в развертывании, клиенты должны
   усмотрение в пределах запрашиваемого доступа, особенно
   количество целевых сервисов. Сервер авторизации может использовать
   Код ошибки «invalid_target», определенный в Разделе 2.2.2, для информирования
   клиент, который запросил доступ к слишком большому количеству целевых сервисов
   одновременно.

2.2. Ответ

   Сервер авторизации отвечает на запрос обмена токенами с
   нормальный OAuth 2.0 ответ от конечной точки токена, как указано в
   Раздел 5 [RFC6749]. Дополнительные подробности и объяснения приведены здесь.
   предоставлено в следующих подразделах.

2.2.1. Успешный ответ

   Если запрос действителен и соответствует всем политикам и другим критериям
   сервер авторизации, создается успешный ответ токена
   добавив следующие параметры в тело объекта HTTP
   ответ с использованием типа носителя "application / json", как указано
   [RFC8259] и код состояния HTTP 200.Параметры
   сериализован в структуру JavaScript Object Notation (JSON) с помощью
   добавление каждого параметра на верхнем уровне. Имена параметров и строка
   значения включены в виде строк JSON. Включены числовые значения
   как числа JSON. Порядок параметров не имеет значения и может
   отличаться.

   access_token
      ОБЯЗАТЕЛЬНЫЙ. Маркер безопасности, выданный сервером авторизации.
      в ответ на запрос на обмен токена. "Access_token"
      параметр из раздела 5.1 [RFC6749] используется здесь для переноса
      запрошенный токен, который позволяет этому протоколу обмена токенами использовать
      существующий OAuth 2.0 конструкций запроса и ответа, определенных для
      конечная точка токена. Идентификатор access_token используется для
      исторические причины и выпущенный токен не обязательно должен быть OAuth
      токен доступа.

   выданный_token_type
      ОБЯЗАТЕЛЬНЫЙ. Идентификатор, как описано в разделе 3, для
      представление выпущенного токена безопасности.

   token_type
      ОБЯЗАТЕЛЬНЫЙ. Значение без учета регистра, определяющее метод использования
      выданный токен доступа, как указано в разделе 7.1 [RFC6749].Он предоставляет клиенту информацию о том, как использовать
      токен доступа для доступа к защищенным ресурсам. Например, значение
      "Bearer", как указано в [RFC6750], указывает, что выданный
      токен безопасности - это токен на предъявителя, и клиент может просто представить
      это как есть без каких-либо дополнительных доказательств права на участие за пределами
      содержимое самого токена. Обратите внимание, что смысл этого
      параметр отличается от значения "тип_выданного_тока"
      параметр, который декларирует представление выданного
      маркер безопасности; термин "тип токена" чаще используется для
      означают структурное или синтаксическое представление безопасности
      токен, как и во всех параметрах "* _token_type" в этом
      Технические характеристики.Если выпущенный токен не является токеном доступа или
      может использоваться в качестве токена доступа, тогда значение "token_type" "N_A" будет
      используется для обозначения того, что идентификатор "token_type" OAuth 2.0 не является
      применимо в этом контексте.

   истекает
      РЕКОМЕНДУЕМЫЕ. Срок действия токена в секундах.
      выдается сервером авторизации. Часто клиент
      не иметь склонности или способности проверять содержание
      токен, и этот параметр обеспечивает согласованный и токен-
      не зависящий от типа признак того, как долго токен может ожидать
      быть действительным.Например, значение 1800 означает, что токен будет
      Срок действия истекает через тридцать минут с момента создания ответа.

   сфера
      НЕОБЯЗАТЕЛЬНО, если объем выданного токена безопасности идентичен
      объем, запрошенный клиентом; в противном случае это ОБЯЗАТЕЛЬНО.

   refresh_token
      ПО ЖЕЛАНИЮ. Токен обновления обычно не выдается, когда
      обмен имеет одно временное удостоверение (subject_token) для
      разные временные учетные данные (выданный токен) для использования в некоторых
      другой контекст.Токен обновления может быть выпущен в тех случаях, когда
      клиенту обмена токенами необходима возможность доступа к
      ресурс, даже если исходные учетные данные больше не действительны
      (например, сценарии отсутствия пользователя или офлайн, когда нет
      больше любого пользователя, занимающегося активной сессией с клиентом).
      Профили или развертывания этой спецификации должны быть четко
      задокументировать условия, при которых клиенту следует ожидать
      обновить токен в ответ на "urn: ietf: params: oauth: grant-
      type: token-exchange "запросы типа предоставления.2.2.2. Ответ об ошибке

   Если сам запрос недействителен или "subject_token"
   или "токен-актера" недействительны по какой-либо причине или неприемлемы
   на основе политики сервер авторизации ДОЛЖЕН создать ошибку
   ответ, как указано в разделе 5.2 [RFC6749]. Ценность
   Параметр «error» ДОЛЖЕН быть кодом ошибки «invalid_request».

   Если сервер авторизации не желает или не может выдать токен
   для любой целевой услуги, указанной «ресурсом» или «аудиторией»
   параметров, СЛЕДУЕТ использовать код ошибки «invalid_target» в
   ответ об ошибке.Сервер авторизации МОЖЕТ включать дополнительную информацию о
   причины ошибки с использованием "error_description", как обсуждалось
   в разделе 5.2 [RFC6749].

   При необходимости также могут использоваться другие коды ошибок.

2.3. Пример обмена токенов

   В следующем примере демонстрируется гипотетический обмен токенами в
   который сервер ресурсов OAuth берет на себя роль клиента во время
   обмен. Он торгует токеном доступа, полученным в
   защищенный запрос ресурса для нового токена, который он будет использовать для вызова
   в серверную службу (дополнительные разрывы строк и отступы в
   примеры приведены только для демонстрации).На рисунке 1 показан сервер ресурсов, получающий защищенный ресурс.
   запрос, содержащий токен доступа OAuth в заголовке авторизации,
   как указано в разделе 2.1 [RFC6750].

    GET / ресурс HTTP / 1.1
    Хост: frontend.example.com
    Авторизация: Bearer accVkjcJyb4BWCxGsndESCJQbdFMogUC5PbRDqceLTC

                    Рисунок 1: Защищенный запрос ресурса

   На рисунке 2 сервер ресурсов принимает на себя роль клиента для
   токен обмена, а токен доступа из запроса на рисунке 1
   отправлено на сервер авторизации с использованием запроса, как указано в
   Раздел 2.1. Значение параметра subject_token несет в себе
   токен доступа и значение параметра subject_token_type
   указывает, что это токен доступа OAuth 2.0. Сервер ресурсов,
   выступая в роли клиента, использует свой идентификатор и секрет для
   аутентифицироваться на сервере авторизации с помощью HTTP Basic
   схема аутентификации. Параметр "ресурс" указывает
   расположение серверной службы, ,
   где будет использоваться выпущенный токен.POST /as/token.oauth3 HTTP / 1.1
    Хост: as.example.com
    Авторизация: Базовая cnMwODpsb25nLXNlY3VyZS1yYW5kb20tc2VjcmV0
    Тип содержимого: application / x-www-form-urlencoded

    grant_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Agrant-type% 3Atoken-exchange
    & resource = https% 3A% 2F% 2Fbackend.example.com% 2Fapi
    & subject_token = accVkjcJyb4BWCxGsndESCJQbdFMogUC5PbRDqceLTC
    & subject_token_type =
     urn% 3Aietf% 3Aparams% 3Aoauth% 3Atoken-type% 3Aaccess_token

                      Рисунок 2: Запрос на обмен токенами

   Сервер авторизации проверяет учетные данные клиента и
   «subject_token», представленный в запросе на обмен токена.От
   параметр "ресурс", который может определить сервер авторизации
   соответствующую политику, применяемую к запросу, и выдает токен
   подходит для использования на . В
   Параметр "access_token" ответа, показанного на рисунке 3, содержит
   новый токен, который сам является токеном доступа OAuth на предъявителя, который
   действительна в течение одной минуты. Маркер оказался JWT; однако его
   структура и формат непрозрачны для клиента, поэтому
   «Issuated_token_type» указывает только на то, что это токен доступа.HTTP / 1.1 200 ОК
    Тип содержимого: приложение / json
    Cache-Control: без кеширования, без хранения

    {
     "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IjllciJ9.eyJhdWQiOiJo
       dHRwczovL2JhY2tlbmQuZXhhbXBsZS5jb20iLCJpc3MiOiJodHRwczovL2FzLmV
       4YW1wbGUuY29tIiwiZXhwIjoxNDQxOTE3NTkzLCJpYXQiOjE0NDE5MTc1MzMsIn
       N1YiI6ImJkY0BleGFtcGxlLmNvbSIsInNjb3BlIjoiYXBpIn0.40y3ZgQedw6rx
       f59WlwHDD9jryFOr0_Wh4CGozQBihNBhnXEQgU85AI9x3KmsPottVMLPIWvmDCM
       y5-kdXjwhw ",
     "выданный_тоген_тип":
         "urn: ietf: params: oauth: token-type: access_token",
     "token_type": "На предъявителя",
     "expires_in": 60
    }

                     Рисунок 3: Ответ обмена токенами

   Затем сервер ресурсов может использовать вновь полученный токен доступа в
   отправка запроса к внутреннему серверу, как показано на рисунке 4.GET / api HTTP / 1.1
    Хост: backend.example.com
    Авторизация: предъявитель eyJhbGciOiJFUzI1NiIsImtpZCI6IjllciJ9.eyJhdWQ
       iOiJodHRwczovL2JhY2tlbmQuZXhhbXBsZS5jb20iLCJpc3MiOiJodHRwczovL2
       FzLmV4YW1wbGUuY29tIiwiZXhwIjoxNDQxOTE3NTkzLCJpYXQiOjE0NDE5MTc1M
       zMsInN1YiI6ImJkY0BleGFtcGxlLmNvbSIsInNjb3BlIjoiYXBpIn0.40y3ZgQe
       dw6rxf59WlwHDD9jryFOr0_Wh4CGozQBihNBhnXEQgU85AI9x3KmsPottVMLPIW
       vmDCMy5-kdXjwhw

                Рисунок 4: Запрос ресурсов, защищенных сервером

   Дополнительные примеры можно найти в Приложении А.3. Идентификаторы типа токена

   Некоторые параметры в этой спецификации используют идентификатор в качестве
   значение для описания рассматриваемого токена. В частности, они
   «тип запрошенного_знака», «тип_знака_предмета» и «тип_знака_актера»
   параметры запроса и член "selected_token_type"
   отклик. Идентификаторы типа токена - это URI. Обмен токенов может работать
   как с токенами, выпущенными другими сторонами, так и с токенами из данного
   сервер авторизации. В первом случае идентификатор типа токена
   указывает синтаксис (например,g., JWT или SAML 2.0), поэтому авторизация
   сервер может его проанализировать; для последнего он указывает, что данный
   сервер авторизации выдал его для (например, "access_token" или
   "refresh_token").

   Следующие идентификаторы типа токена определяются этим
   Технические характеристики. Другие URI МОГУТ использоваться для обозначения других типов токенов.

   urn: ietf: params: oauth: token-type: access_token
      Указывает, что токен является токеном доступа OAuth 2.0, выпущенным
      данный сервер авторизации.

   urn: ietf: params: oauth: token-type: refresh_token
      Указывает, что это токен OAuth 2.0 токен обновления, выпущенный
      данный сервер авторизации.

   urn: ietf: params: oauth: token-type: id_token
      Указывает, что токен является ID-токеном, как определено в Разделе 2
      [OpenID.Core].

   urn: ietf: params: oauth: token-type: saml1
      Указывает, что токен представляет собой SAML 1.1 с кодировкой base64url.
      [OASIS.saml-core-1.1] утверждение.

   urn: ietf: params: oauth: token-type: saml2
      Указывает, что токен представляет собой SAML 2.0 с кодировкой base64url.
      Утверждение [OASIS.saml-core-2.0-os].

   Значение urn: ietf: params: oauth: token-type: jwt, которое определено в
   Раздел 9 [JWT] указывает, что токен является JWT.Разница между токеном доступа и JWT тонкая. An
   токен доступа представляет собой делегированное решение об авторизации, тогда как
   JWT - это формат токена. Токен доступа может быть отформатирован как JWT, но
   не обязательно должно быть. И JWT вполне может быть доступом
   токен, но не все JWT являются токенами доступа. Цель этого
   спецификация такова: "urn: ietf: params: oauth: token-type: access_token"
   быть индикатором того, что токен является типичным выданным токеном доступа OAuth
   сервером авторизации, непрозрачным для клиента, и
   можно использовать так же, как и любой другой токен доступа, полученный из этого
   сервер авторизации.(Это вполне может быть JWT, но клиент не
   и не нужно знать об этом факте.) Принимая во внимание,
   "urn: ietf: params: oauth: token-type: jwt" специально указывает
   что JWT запрашивается или отправляется (возможно, при междоменном использовании
   случай, когда JWT используется в качестве разрешения на получение
   токен доступа с другого сервера авторизации, как это упрощено
   автор [RFC7523]).

   Обратите внимание, что для токенов, которые являются двоичными по своей природе, URI, используемый для
   их передача должна быть связана с семантикой base64
   или другая кодировка, подходящая для использования с HTTP и OAuth.4. Заявки на веб-токены JSON и параметры ответа самоанализа

   Полезно иметь определенные механизмы для выражения делегирования внутри
   токен, а также для выражения авторизации делегировать или
   олицетворять. Хотя описанный здесь протокол обмена токенами
   может использоваться с любым типом токена, в этом разделе определяются требования к
   выражать такую ​​семантику специально для JWT и в OAuth 2.0
   Ответ Token Introspection [RFC7662]. Подобные определения для
   возможны другие типы токенов, но выходящие за рамки этого
   Технические характеристики.Обратите внимание, что формула изобретения не установлена ​​в данном документе, но используется в примерах и
   описания, такие как "iss", "sub", "exp" и т. д., определяются
   [JWT].

4.1. "act" (Актер) Претензия

   Утверждение "act" (субъект) предоставляет в JWT средство для выражения этого
   делегирование произошло и определить действующую сторону, которой
   полномочия делегированы. Значение утверждения "act" - это JSON.
   объект, а члены в объекте JSON являются утверждениями, которые идентифицируют
   актер. Утверждения, составляющие "действие", идентифицируют и, возможно,
   предоставить дополнительную информацию об актере.Например,
   комбинация двух требований "iss" и "sub" может быть необходима для
   однозначно идентифицировать актера.

   Однако претензии в рамках претензии "акт" относятся только к личности
   актера и не имеют отношения к действительности содержащего
   JWT так же, как утверждает верхний уровень. Следовательно, не-
   утверждения идентичности (например, "exp", "nbf" и "aud") не имеют смысла
   когда используется в заявлении "действие" и поэтому не используются.

   На рисунке 5 показано «действие» (актер) в наборе заявлений JWT.Заявления самого токена касаются [email protected], в то время как
   Заявление "act" указывает на то, что текущим актером является [email protected].

    {
      "aud": "https://consumer.example.com",
      "iss": "https://issuer.example.com",
      «exp»: 14437,
      «nbf»: 1443

7, "sub": "[email protected]", "действовать": { "sub": "[email protected]" } } Рисунок 5: Заявление об актере Цепочка делегирования может быть выражена вложением одного утверждения "акт" внутри другого.Самая внешняя претензия "акт" представляет текущую субъект, в то время как вложенные утверждения «действия» представляют предшествующих субъектов. В мере последний актер - самый глубоко вложенный. Вложенные претензии "акт" служат историческим следом, который связывает первоначальный запрос и субъектом через различные шаги делегирования, предпринятые до достижение текущего актера. В этом смысле действующий актер считается, что включает всю историю авторизации / делегирования, что естественно приводит к описанной здесь вложенной структуре.В целях применения политики контроля доступа потребитель токен ДОЛЖЕН учитывать только требования токена верхнего уровня, а сторона определен как действующий субъект в заявлении "акт". Предыдущие актеры идентифицированные любыми вложенными претензиями "действия" являются только информационными и не должны учитываться при принятии решений по управлению доступом. В следующем примере на рисунке 6 показано вложенное «действие» (актер). заявки в наборе заявлений JWT. Заявления самого токена о user @ example.com, в то время как утверждение "действие" указывает на то, что system - текущий актер и был предыдущим актером. Такой жетон может произойти в результате того, что service16 получает токен в звонок из service77 и обмен на жетон, подходящий для звонка service26, в то время как сервер авторизации отмечает ситуацию в недавно выпущенный токен. { "aud": "https://service26.example.com", "iss": "https: // эмитент.example.com ", «exp»: 1443
0, «НБФ»: 14430, "sub": "[email protected]", "действовать": { "sub": "https://service16.example.com", "действовать": { "sub": "https://service77.example.com" } } } Рисунок 6: Вложенное утверждение актера При включении в качестве члена верхнего уровня в самоанализ токена OAuth ответ, "действие" имеет ту же семантику и формат, что и утверждение то же имя. 4.2. Заявление "scope" (Scopes) Значение утверждения "scope" - это строка JSON, содержащая пробел - разделенный список областей, связанных с токеном, в формате описано в разделе 3.3 из [RFC6749]. На рисунке 7 показано утверждение «объема» в наборе утверждений JWT. { "aud": "https://consumer.example.com", "iss": "https://issuer.example.com", «exp»: 14437, «nbf»: 1443

7, "sub": "dgaf4mvfs75Fci_FL3heQA", "scope": "адрес телефона профиля электронной почты" } Рисунок 7: Заявление об объемах OAuth 2.0 Token Introspection [RFC7662] уже определяет "область действия" параметр для передачи областей, связанных с токеном. 4.3.Заявление "client_id" (идентификатор клиента) Утверждение client_id содержит идентификатор клиента OAuth 2.0. [RFC6749] клиент, запросивший токен. В следующем примере на рисунке 8 показано утверждение client_id. в наборе утверждений JWT, указывающем на клиента OAuth 2.0 с «s6BhdRkqt3» в качестве его идентификатора. { "aud": "https://consumer.example.com", "iss": "https://issuer.example.com", «exp»: 14437, "sub": "[email protected]", "client_id": "s6BhdRkqt3" } Рисунок 8: Заявление об идентификаторе клиента OAuth 2.0 Token Introspection [RFC7662] уже определяет параметр client_id в качестве идентификатора клиента для OAuth 2.0. клиент, запросивший токен. 4.4. Заявление "may_act" (Уполномоченный участник) В заявлении "may_act" говорится, что одна сторона имеет право стать актером и действовать от имени другой стороны. Претензия может использоваться, например, когда "subject_token" представлен конечная точка токена в запросе обмена токенами и утверждение may_act в предметный токен может использоваться сервером авторизации для определения является ли клиент (или сторона, указанная в "токен-актера") уполномочен участвовать в запрошенном делегировании или выдаче себя за другое лицо.Значение утверждения - это объект JSON, а члены объекта JSON - это претензии, которые идентифицируют сторону, которая, как утверждается, имеет право действовать от имени стороны, указанной JWT, содержащей претензию. В претензии, составляющие претензию "may_act", идентифицируют и, возможно, предоставляют дополнительная информация об уполномоченном актере. Например, иногда необходима комбинация двух утверждений "iss" и "sub" для однозначной идентификации авторизованного субъекта, в то время как "электронная почта" требует может использоваться для предоставления дополнительной полезной информации об этом вечеринка.Однако претензии в претензии "may_act" относятся только к личность этой стороны и не имеют отношения к действительности содержащие JWT таким же образом, как и утверждения верхнего уровня. Вследствие этого, такие утверждения, как "exp", "nbf" и "aud", не имеют смысла при использовании в заявлении "may_act" и поэтому не используются. На рисунке 9 показано утверждение «may_act» в наборе заявлений JWT. Заявления самого токена касаются [email protected], в то время как Утверждение "may_act" указывает, что admin @ example.com уполномочен действовать от имени [email protected]. { "aud": "https://consumer.example.com", "iss": "https://issuer.example.com", «exp»: 14437, «nbf»: 1443

7, "sub": "[email protected]", "may_act": { "sub": "[email protected]" } } Рисунок 9: Заявление об авторизованном актере При включении в качестве члена верхнего уровня в самоанализ токена OAuth ответ "may_act" имеет ту же семантику и формат, что и утверждение одно и то же имя.5. Соображения безопасности Большая часть рекомендаций из Раздела 10 [RFC6749], Безопасность Соображения, касающиеся платформы авторизации OAuth 2.0, также применимо здесь. Кроме того, [RFC6819] обеспечивает дополнительную безопасность. рекомендации по OAuth, и [OAUTH-SECURITY] обновил систему безопасности руководство, основанное на опыте развертывания и новых угрозах, появился с момента первоначальной публикации OAuth 2.0. Все обычные проблемы безопасности, которые обсуждаются в [JWT], особенно в отношении сравнения URI и работы с непризнанные значения также применяются здесь.Кроме того, как делегирование, так и олицетворение вводят уникальные проблемы с безопасностью. Каждый раз, когда одному принципалу делегируются права Другой принцип, возможность злоупотреблений вызывает беспокойство. Использование утверждение "объема" (в дополнение к другим типичным ограничениям, таким как ограниченное время жизни токена), чтобы снизить вероятность таких злоупотребление, поскольку оно ограничивает контексты, в которых делегированные права могут быть осуществленным. 6. Соображения о конфиденциальности Токены, используемые в контексте описанных здесь функций. может содержать конфиденциальную информацию и, чтобы предотвратить раскрытие такой информации непреднамеренным сторонам ДОЛЖЕН передаваться только по зашифрованным каналам, таким как Transport Layer Security (TLS).В случаи, когда желательно предотвратить раскрытие определенных информации для клиента, токен ДОЛЖЕН быть зашифрован до его предполагаемый получатель. Развертывания ДОЛЖНЫ определять минимально необходимый объем данных и включать такую ​​информацию только в выданный жетоны. В некоторых случаях минимизация данных может включать представление только анонимный или псевдонимный пользователь. 7. Соображения IANA 7.1. Регистрация URI OAuth IANA зарегистрировала следующие значения в «OAuth URI» подрегистр реестра «Параметры OAuth» [IANA.OAuth.Parameters]. Подрегистр "OAuth URI" был создан. автор [RFC6755]. * URN: urn: ietf: params: oauth: grant-type: token-exchange * Общее название: тип предоставления доступа к обмену токенами для OAuth 2.0. * Изменить контроллер: IESG * Документ спецификации: раздел 2.1 RFC 8693 * URN: urn: ietf: params: oauth: token-type: access_token * Общее имя: URI типа токена для токена доступа OAuth 2.0. * Изменить контроллер: IESG * Документ спецификации: раздел 3 RFC 8693 * URN: urn: ietf: params: oauth: token-type: refresh_token * Общее имя: URI типа токена для OAuth 2.0 токен обновления * Изменить контроллер: IESG * Документ спецификации: раздел 3 RFC 8693 * URN: urn: ietf: params: oauth: token-type: id_token * Общее имя: URI типа токена для идентификатора токена. * Изменить контроллер: IESG * Документ спецификации: раздел 3 RFC 8693 * URN: urn: ietf: params: oauth: token-type: saml1 * Общее имя: URI типа токена для SAML 1.1 с кодировкой base64url. утверждение * Изменить контроллер: IESG * Документ спецификации: раздел 3 RFC 8693 * URN: urn: ietf: params: oauth: token-type: saml2 * Общее имя: URI типа токена для SAML 2 с кодировкой base64url.0 утверждение * Изменить контроллер: IESG * Документ спецификации: раздел 3 RFC 8693 7.2. Регистрация параметров OAuth IANA зарегистрировала следующие значения в «Параметрах OAuth» подрегистр реестра «Параметры OAuth» [IANA.OAuth.Parameters]. Подрегистр «Параметры OAuth» был установлен [RFC6749]. * Название параметра: аудитория * Место использования параметра: запрос токена * Сменить контроллер: IESG * Технические характеристики: Раздел 2.1 из RFC 8693 * Имя параметра: required_token_type * Место использования параметра: запрос токена * Сменить контроллер: IESG * Документ (ы) спецификации: раздел 2.1 RFC 8693 * Имя параметра: subject_token * Место использования параметра: запрос токена * Сменить контроллер: IESG * Документ (ы) спецификации: раздел 2.1 RFC 8693 * Имя параметра: subject_token_type * Место использования параметра: запрос токена * Сменить контроллер: IESG * Технические характеристики: Раздел 2.1 из RFC 8693 * Имя параметра: Actor_token * Место использования параметра: запрос токена * Сменить контроллер: IESG * Документ (ы) спецификации: раздел 2.1 RFC 8693 * Имя параметра: тип-токена-актера * Место использования параметра: запрос токена * Сменить контроллер: IESG * Документ (ы) спецификации: раздел 2.1 RFC 8693 * Имя параметра: выданный_тип_токена * Место использования параметра: ответ токена * Сменить контроллер: IESG * Технические характеристики: Раздел 2.2.1 RFC 8693 7.3. Регистрация типа токена доступа OAuth IANA зарегистрировала следующий тип токена доступа в «OAuth Подрегистр "Типы токенов доступа" реестра "Параметры OAuth" [IANA.OAuth.Parameters]. Подрегистр «Типы токенов доступа OAuth» был установлен [RFC6749]. * Название типа: N_A * Дополнительные параметры ответа конечной точки токена: нет * Схема (ы) аутентификации HTTP: нет * Сменить контроллер: IESG * Технические характеристики: Раздел 2.2.1 из RFC 8693 7.4. Регистрация заявок на веб-токены JSON IANA зарегистрировала следующие претензии в «веб-токене JSON Подрегистр утверждений в реестре JSON Web Token (JWT) [IANA.JWT]. Создан подрегистр «Заявки на веб-токены JSON». автор: [JWT]. * Название претензии: акт * Описание претензии: Актер * Изменить контроллер: IESG * Спецификация: раздел 4.1 RFC 8693 * Название претензии: сфера действия * Описание претензии: значения объема * Изменить контроллер: IESG * Технические характеристики: Раздел 4.2 из RFC 8693 * Название претензии: client_id * Описание претензии: идентификатор клиента * Изменить контроллер: IESG * Спецификации: раздел 4.3 RFC 8693 * Название претензии: may_act * Описание претензии: Уполномоченный субъект - сторона, уполномоченная стать актером * Изменить контроллер: IESG * Спецификация: раздел 4.4 RFC 8693 7.5. Регистрация ответа самоанализа токена OAuth IANA зарегистрировала следующие значения в «OAuth Token Реестр ответов самоанализа »реестра« Параметры OAuth » [IANA.OAuth.Parameters]. "Ответ самоанализа токена OAuth" Реестр был создан [RFC7662]. * Имя: акт * Описание: Актер * Изменить контроллер: IESG * Спецификация: раздел 4.1 RFC 8693 * Имя: may_act * Описание: Уполномоченный субъект - сторона, уполномоченная стать актером * Изменить контроллер: IESG * Спецификация: раздел 4.4 RFC 8693 8. Ссылки 8.1. Нормативные ссылки [IANA.JWT] IANA, «Веб-токен JSON (JWT)», . [IANA.OAuth.Parameters] IANA, «Параметры OAuth», . [JWT] Джонс, М., Брэдли, Дж. И Н. Сакимура, "Веб-токен JSON (JWT) ", RFC 7519, DOI 10.17487 / RFC7519, май 2015 г., . [RFC2119] Брэднер, С. «Ключевые слова для использования в RFC для обозначения Уровни требований », BCP 14, RFC 2119, DOI 10.17487 / RFC2119, март 1997 г., . [RFC3986] Бернерс-Ли, Т., Филдинг, Р., и Л. Масинтер, "Униформа Идентификатор ресурса (URI): Общий синтаксис », STD 66, RFC 3986, DOI 10.17487 / RFC3986, январь 2005 г., . [RFC6749] Hardt, D., Ed., «Платформа авторизации OAuth 2.0», RFC 6749, DOI 10.17487 / RFC6749, октябрь 2012 г., . [RFC7662] Richer, J., Ed., "Самоанализ токена OAuth 2.0", RFC 7662, DOI 10.17487 / RFC7662, октябрь 2015 г., . [RFC8174] Лейба Б., «Неоднозначность прописных и строчных букв в RFC. 2119 Ключевые слова », BCP 14, RFC 8174, DOI 10.17487 / RFC8174, Май 2017 г., . [RFC8259] Bray, T., Ed., "Данные JavaScript Object Notation (JSON)" Формат обмена ", STD 90, RFC 8259, DOI 10.17487 / RFC8259, декабрь 2017 г., . 8.2. Информативные ссылки [OASIS.saml-core-1.1] Малер, Э., Мишра, П. и Р. Филпотт, "Утверждения и Протокол для языка разметки утверждений безопасности OASIS (SAML) V1.1 ", OASIS Standard oasis-sstc-saml-core-1.1, Сентябрь 2003 г., . [OASIS.saml-core-2.0-os] Кантор, С., Кемп, Дж., Филпотт, Р., и Э. Малер, "Утверждения и протокол для утверждения безопасности OASIS Язык разметки (SAML) V2.0 ", OASIS Standard saml-core- 2.0-os, март 2005 г., . [OAUTH-RESOURCE] Кэмпбелл Б., Брэдли Дж. И Х. Чофениг, "Ресурс Индикаторы для OAuth 2.0 ", Работа в процессе, Интернет- Проект, draft-ietf-oauth-resource-sizes-08, 11 Сентябрь 2019, . [OAUTH-БЕЗОПАСНОСТЬ] Лоддерстедт Т., Брэдли Дж., Лабунец А. и Д. Фетт, «Лучшие текущие практики обеспечения безопасности OAuth 2.0», Работа в Прогресс, Internet-Draft, draft-ietf-oauth-security- themes-13, 8 июля 2019 г., . [OpenID.Core] Сакимура, Н., Брэдли, Дж., Джонс, М., де Медейрос, Б., а также К. Мортимор, «OpenID Connect Core 1.0», ноябрь 2014 г., . [RFC6750] Джонс, М. и Д. Хардт, «Авторизация OAuth 2.0. Платформа: использование токена на предъявителя », RFC 6750, DOI 10.17487 / RFC6750, октябрь 2012 г., . [RFC6755] Кэмпбелл, Б. и Х. Чофениг, "Подпространство имен URN IETF для OAuth ", RFC 6755, DOI 10.17487 / RFC6755, октябрь 2012 г., . [RFC6819] Lodderstedt, T., Ed., McGloin, M., and P. Hunt, "OAuth 2.0 Модель угроз и соображения безопасности », RFC 6819, DOI 10.17487 / RFC6819, январь 2013 г., . [RFC7521] Кэмпбелл, Б., Мортимор, К., Джонс, М., и Ю. Голанд, "Платформа утверждения для аутентификации клиента OAuth 2.0 и гранты авторизации », RFC 7521, DOI 10.17487 / RFC7521, Май 2015 г., . [RFC7523] Джонс, М., Кэмпбелл, Б. и К. Мортимор, "Веб-токен JSON (JWT) Профиль для аутентификации клиента OAuth 2.0 и Разрешения на авторизацию ", RFC 7523, DOI 10.17487 / RFC7523, май 2015 г., . [WS-Trust] Надалин, А., Ред., Гуднер, М., Под ред. Гудгина, М., Барбир, А., ред., И Х. Гранквист, ред., WS-Trust 1.4 ", Февраль 2012 г., . Приложение A. Дополнительные примеры обмена токенами В следующих разделах представлены два примера обмена токенами. иллюстрирующие олицетворение и делегирование, соответственно (с дополнительными разрывы строк и отступы только для отображения). А.1. Пример обмена токенами олицетворения А.1.1. Запрос на обмен токена В следующем запросе на обмен токенами клиент запрашивает токен с семантикой олицетворения (делегирование невозможно с только «subject_token», а не «worker_token»).Клиент сообщает сервер авторизации, что ему нужен токен для использования на цели сервис с логическим названием «урна: пример: сотрудничество-контекст». POST /as/token.oauth3 HTTP / 1.1 Хост: as.example.com Тип содержимого: application / x-www-form-urlencoded grant_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Agrant-type% 3Atoken-exchange & audit = urn% 3Aexample% 3Acooperation-context & subject_token = eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwc zovL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXI uZXhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTA2MDAsIm5iZiI6MTQ0MTkwOTAwMCwic 3ViIjoiYmRjQGV4YW1wbGUubmV0Iiwic2NvcGUiOiJvcmRlcnMgcHJvZmlsZSBoaXN 0b3J5In0.PRBg-jXn4cJuj1gmYXFiGkZzRuzbXZ_sDxdE98ddW44ufsbWLKd3JJ1VZ hF64pbTtfjy4VXFVBDaQpKjn5JzAw & subject_token_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Atoken-type% 3Ajwt Рисунок 10: Запрос на обмен токенами А.1.2. Предметные претензии по токенам «Subject_token» в предыдущем запросе - это JWT, а декодированный Здесь показан набор заявлений JWT. JWT предназначен для потребления сервер авторизации в определенном временном окне. Предмет JWT ("[email protected]") - это сторона, от имени которой новый токен запрашивается.{ "aud": "https://as.example.com", "iss": "https://original-issuer.example.net", «exp»: 1441
    0, «НБФ»: 14410, "sub": "[email protected]", "scope": "история профиля заказов" } Рисунок 11: Заявления на токены субъекта А.1.3. Ответ обмена токенов Показан параметр access_token в ответе на обмен токенами. ниже содержит новый токен, запрошенный клиентом. Другой параметры ответа указывают, что токен является носителем доступа токен, срок действия которого истекает через час.HTTP / 1.1 200 ОК Тип содержимого: приложение / json Cache-Control: без кеширования, без хранения { "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IjcyIn0.eyJhdWQiOiJ1cm4 6ZXhhbXBsZTpjb29wZXJhdGlvbi1jb250ZXh0IiwiaXNzIjoiaHR0cHM6Ly9hcy5l eGFtcGxlLmNvbSIsImV4cCI6MTQ0MTkxMzYxMCwic3ViIjoiYmRjQGV4YW1wbGUub mV0Iiwic2NvcGUiOiJvcmRlcnMgcHJvZmlsZSBoaXN0b3J5In0.rMdWpSGNACTvnF uOL74sYZ6MVuld2Z2WkGLmQeR9ztj6w2OXraQlkJmGjyiCq24kcB7AI2VqVxl3wSW НВХ85А ", "выданный_тоген_тип": "urn: ietf: params: oauth: token-type: access_token", "token_type": "На предъявителя", "expires_in": 3600 } Рисунок 12: Ответ обмена токенами А.1.4. Выпущенные токены Декодированный набор заявлений JWT выданного токена показан ниже. В новый JWT выдается сервером авторизации и предназначен для потребление системным объектом, известным под логическим именем "урна: пример: сотрудничество-контекст" в любое время до истечения срока его действия. Тема («подпрограмма») JWT такая же, как и тема токена. используется для отправки запроса, что позволяет клиенту олицетворять этого субъекта в системном объекте, известном логическим имя «урна: пример: контекст сотрудничества» с помощью токена.{ "aud": "urn: example: сотрудничество-контекст", "iss": "https://as.example.com", «exp»: 14410, "sub": "[email protected]", "scope": "история профиля заказов" } Рисунок 13: Выпущенные заявки на токены А.2. Пример обмена токенами делегирования А.2.1. Запрос на обмен токена В следующем запросе на обмен токенами клиент запрашивает token и предоставляет как «subject_token», так и «actor_token ». В клиент сообщает серверу авторизации, что ему нужен токен для использования в целевой службе с логическим именем «урна: пример: сотрудничество- контекст ".Политика на сервере авторизации диктует, что выпущенный токен является составным. POST /as/token.oauth3 HTTP / 1.1 Хост: as.example.com Тип содержимого: application / x-www-form-urlencoded grant_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Agrant-type% 3Atoken-exchange & audit = urn% 3Aexample% 3Acooperation-context & subject_token = eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwc zovL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXI uZXhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTAwNjAsInNjb3BlIjoic3RhdHVzIGZlZ WQiLCJzdWIiOiJ1c2VyQGV4YW1wbGUubmV0IiwibWF5X2FjdCI6eyJzdWIiOiJhZG1 pbkBleGFtcGxlLm5ldCJ9fQ.4rPRSWihQbpMIgAmAoqaJojAxj-p2X8_fAtAGTXrvM xU-eEZHnXqY0_AOZgLdxw5DyLzua8H_I10MCcckF-Q_g & subject_token_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Atoken-type% 3Ajwt & act_token = eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwczo vL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXIuZ XhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTAwNjAsInN1YiI6ImFkbWluQGV4YW1wbGU ubmV0In0.7YQ-3zPfhUvzje5oqw8COCvN5uP6NsKik9CVV6cAOf4QKgM-tKfiOwcgZ oUuDL2tEs6tqPlcBlMjiSzEjm3yBg & act_token_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Atoken-type% 3Ajwt Рисунок 14: Запрос на обмен токенами А.2.2. Предметные претензии по токенам «Subject_token» в предыдущем запросе - это JWT, а декодированный Здесь показан набор заявлений JWT. JWT предназначен для потребления сервер авторизации до определенного срока. В субъектом JWT ("[email protected]") является сторона от имени у кого запрашивается новый токен. { "aud": "https://as.example.com", "iss": "https://original-issuer.example.net", «exp»: 14410, "scope": "статусный канал", "sub": "user @ example.сеть", "may_act": { "sub": "[email protected]" } } Рисунок 15: Предметные утверждения токенов А.2.3. Заявки на токены актера «Актер-токен» в предыдущем запросе - это JWT, а декодированный JWT Здесь показан набор требований. Этот JWT также предназначен для потребления сервером авторизации до определенного срока. В субъект JWT ("[email protected]") - это субъект, который будет использовать запрашиваемый токен безопасности. { "aud": "https: // as.example.com ", "iss": "https://original-issuer.example.net", «exp»: 14410, "sub": "[email protected]" } Рисунок 16: Заявки на токены участника А.2.4. Ответ обмена токенов Показан параметр access_token в ответе на обмен токенами. ниже содержит новый токен, запрошенный клиентом. Другой параметры ответа указывают, что токен является JWT, который истекает через час и что тип токена доступа не применим поскольку выпущенный токен не является токеном доступа.HTTP / 1.1 200 ОК Тип содержимого: приложение / json Cache-Control: без кеширования, без хранения { "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IjcyIn0.eyJhdWQiOiJ1cm4 6ZXhhbXBsZTpjb29wZXJhdGlvbi1jb250ZXh0IiwiaXNzIjoiaHR0cHM6Ly9hcy5l eGFtcGxlLmNvbSIsImV4cCI6MTQ0MTkxMzYxMCwic2NvcGUiOiJzdGF0dXMgZmVlZ CIsInN1YiI6InVzZXJAZXhhbXBsZS5uZXQiLCJhY3QiOnsic3ViIjoiYWRtaW5AZX hhbXBsZS5uZXQifX0.3paKl9UySKYB5ng6_cUtQ2qlO8Rc_y7Mea7IwEXTcYbNdwG 9-G1EKCFe5fW3H0hwX-MSZ49Wpcb1SiAZaOQBtw ", "тип_токена": "urn: ietf: params: oauth: тип-токена: jwt", "token_type": "N_A", "expires_in": 3600 } Рисунок 17: Ответ обмена токенами А.2.5. Выпущенные токены Декодированный набор заявлений JWT выданного токена показан ниже. В новый JWT выдается сервером авторизации и предназначен для потребление системным объектом, известным под логическим именем "урна: пример: сотрудничество-контекст" в любое время до истечения срока его действия. Тема («подпункт») JWT такая же, как и тема «subject_token» использовался для выполнения запроса. Актер («акт») JWT - это то же самое, что и объект "токен-актера", используемый для создания запрос.Это указывает на делегирование и определяет "[email protected]" как текущий субъект, которому предоставлены полномочия делегировано действовать от имени «[email protected]». { "aud": "urn: example: сотрудничество-контекст", "iss": "https://as.example.com", «exp»: 14410, "scope": "статусный канал", "sub": "[email protected]", "действовать": { "sub": "[email protected]" } } Рисунок 18: Выпущенные заявки на токены Благодарности Эта спецификация была разработана в рамках рабочей группы OAuth, который включает в себя десятки активных и преданных своему делу участников.Это было произведенный под председательством Ханнеса Чофенига, Дерека Аткинса, и Рифаат Шех-Юсеф с Кэтлин Мориарти, Стивеном Фарреллом, Эриком Рескорла, Роман Данилив и Бенджамин Кадук в зоне безопасности Директора. Следующие люди представили идеи, отзывы и формулировки для эта спецификация: Калеб Бейкер, Витторио Берточчи, Майк Браун, Томас Бройер, Роман Данилив, Уильям Деннисс, Владимир Джувинов, Эрик Фазендин, Фил Хант, Бенджамин Кадук, Джейсон Кегловиц, Торстен Лоддерстедт, Барри Лейба, Адам Льюис, Джеймс Мангер, Ноя Матаке, Мэтт Миллер, Хилари Орман, Мэттью Перри, Эрик Рескорла, Джастин Ричер, Адам Роуч, Рифат Шех-Юсеф, Скотт Томилсон и Ханнес Чофениг.Адреса авторов Майкл Б. Джонс Microsoft Электронная почта: [email protected] URI: https://self-issued.info/ Энтони Надалин Microsoft Электронная почта: [email protected] Брайан Кэмпбелл (редактор) Ping Identity Эл. Почта: [email protected] Джон Брэдли Юбико Почта: [email protected] Чак Мортимор Виза Электронная почта: [email protected]

Обмен токенов OAuth 2.0

Обмен токенов OAuth 2.0

Обмен токенов OAuth 2.0
draft-ietf-oauth-token-exchange-19

Эта спецификация определяет протокол для службы токенов безопасности (STS) на основе HTTP и JSON, определяя, как запрашивать и получать токены безопасности из OAuth 2.0 серверов авторизации, включая токены безопасности, использующие олицетворение и делегирование.

Этот Интернет-проект представлен в полном соответствии с положениями BCP 78 и BCP 79.

Internet-Drafts являются рабочими документами Инженерной группы Интернета (IETF). Обратите внимание, что другие группы также могут распространять рабочие документы как Интернет-проекты. Список текущих Интернет-проектов находится на https://datatracker.ietf.org/drafts/current/.

Интернет-проекты — это черновики документов, срок действия которых не превышает шести месяцев, и они могут быть обновлены, заменены или отменены другими документами в любое время.Неуместно использовать Интернет-черновики в качестве справочного материала или цитировать их иначе, как «незавершенные работы».

Срок действия этого Интернет-проекта истекает 22 января 2020 г.

Авторские права (c) 2019 IETF Trust и лица, указанные в качестве авторов документа. Все права защищены.

Этот документ регулируется BCP 78 и Правовыми положениями IETF Trust, касающимися документов IETF (https://trustee.ietf.org/license-info), действующими на дату публикации этого документа.Пожалуйста, внимательно ознакомьтесь с этими документами, поскольку они описывают ваши права и ограничения в отношении этого документа. Компоненты кода, извлеченные из этого документа, должны включать упрощенный текст лицензии BSD, как описано в разделе 4.e Правовых положений Trust, и предоставляются без гарантии, как описано в упрощенной лицензии BSD.


Маркер безопасности — это набор информации, который упрощает совместное использование идентификационной информации и информации о безопасности в гетерогенных средах или между доменами безопасности.Примеры токенов безопасности включают в себя веб-токены JSON (JWT) [JWT] и утверждения SAML 2.0 [OASIS.saml-core-2.0-os]. Маркеры безопасности обычно подписываются для достижения целостности, а иногда также зашифровываются для обеспечения конфиденциальности. Токены безопасности также иногда описываются как утверждения, например, в [RFC7521].

Служба маркеров безопасности (STS) — это служба, способная проверять предоставленные ей маркеры безопасности и выдавать новые маркеры безопасности в ответ, что позволяет клиентам получать соответствующие учетные данные для доступа к ресурсам в гетерогенных средах или между доменами безопасности.Клиенты веб-служб использовали WS-Trust в качестве протокола для взаимодействия с STS для обмена токенами. В то время как WS-Trust использует XML и SOAP, в современной веб-разработке наблюдается тенденция к использованию шаблонов RESTful и JSON. Платформа авторизации OAuth 2.0 и токены-носители OAuth 2.0 стали популярными стандартами для авторизации доступа сторонних приложений к ресурсам HTTP и RESTful. Обычное взаимодействие OAuth 2.0 включает обмен некоторого представления авторизации владельца ресурса на токен доступа, что на практике оказалось чрезвычайно полезным шаблоном.Однако его ввод и вывод слишком ограничены, чтобы полностью соответствовать структуре обмена токенами безопасности.

Эта спецификация определяет протокол, расширяющий OAuth 2.0, который позволяет клиентам запрашивать и получать маркеры безопасности от серверов авторизации, действующих в роли STS. Подобно OAuth 2.0, эта спецификация ориентирована на простоту клиентского разработчика и требует только HTTP-клиента и парсера JSON, которые почти повсеместно доступны в современных средах разработки.Протокол STS, определенный в этой спецификации, сам по себе не является RESTful (STS не особенно хорошо поддается подходу REST), но использует шаблоны связи и форматы данных, которые должны быть знакомы разработчикам, привыкшим работать с системами RESTful.

В этой спецификации определены новый тип предоставления для запроса обмена маркером и связанные с ним конкретные параметры для такого запроса к конечной точке маркера. Ответ на обмен токенами — это обычный ответ OAuth 2.0 от конечной точки токена с несколькими дополнительными параметрами, определенными здесь для предоставления информации клиенту.

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

Объем данной спецификации ограничен определением базового протокола запроса и ответа для обмена токенами в стиле STS с использованием OAuth 2.0. Хотя определено несколько новых утверждений JWT, которые позволяют выражать семантику делегирования, конкретный синтаксис, семантика и характеристики безопасности самих токенов (как представленных серверу авторизации, так и полученных клиентом) явно выходят за рамки и не требования предъявляются к модели доверия, в которой может быть развернута реализация.Дополнительные профили могут содержать более подробные требования в отношении конкретного характера участвующих сторон и доверия, например, требуется ли подписание и / или шифрование токенов или потребуются ли или будут выпущены токены в стиле доказательства владения; однако такие детали часто являются политическими решениями, принимаемыми с учетом конкретных потребностей отдельных развертываний, и будут соответствующим образом настроены или реализованы.

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

Один из распространенных вариантов использования STS (как упоминалось в предыдущем разделе) — разрешить серверу ресурсов A выполнять вызовы к серверной службе C от имени запрашивающего пользователя B. В зависимости от политики локального сайта и инфраструктуры авторизации, может быть желательно, чтобы A использовал свои собственные учетные данные для доступа к C вместе с аннотацией некоторой формы, что A действует от имени B («делегирование»), или чтобы A получил учетные данные ограниченного доступа для C, но это продолжается для идентификации B как уполномоченного лица («выдача себя за другое лицо»).Делегирование и олицетворение могут быть полезными концепциями и в других сценариях с участием нескольких участников.

Когда принципал A олицетворяет принципала B, A получает все права, которые B имеет в пределах некоторого определенного контекста прав, и в этом контексте он неотличим от B. Таким образом, когда принципал A олицетворяет принципала B, то в той мере, в какой это касается любого объекта, получающего такой токен, они на самом деле имеют дело с B. Это правда, что некоторые члены системы идентификации могут знать, что олицетворение происходит, но это так. не требование.Для всех намерений и целей, когда A выдает себя за B, A является B в контексте прав, разрешенных токеном. Способность A олицетворять B может быть ограничена по объему или времени, или даже с ограничением одноразового использования, будь то через содержимое токена или внеполосный механизм.

Семантика делегирования отличается от семантики олицетворения, хотя они тесно связаны. С семантикой делегирования принципал A по-прежнему имеет собственное удостоверение, отличное от B, и явно понимается, что, хотя B мог делегировать некоторые из своих прав A, любые предпринимаемые действия предпринимаются A, представляющим B.В некотором смысле A — агент B.

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

Семантика делегирования обычно выражается в токене путем включения информации как об основном субъекте токена, так и об актере, которому этот субъект делегировал некоторые из своих прав.Такой токен иногда называют составным токеном, потому что он состоит из информации о нескольких предметах. Обычно в запросе subject_token представляет собой идентификатор стороны, от имени которой запрашивается токен, в то время как actor_token представляет собой идентификатор стороны, которой делегируются права доступа выданного токена. Составной токен, выпущенный сервером авторизации, будет содержать информацию об обеих сторонах.Когда и если будет выпущен составной токен, определяется сервером авторизации и применимыми политикой и конфигурацией.

Особенности представления составного токена и даже то, будет ли такой токен выпущен, зависят от деталей реализации и типа токена. Представления составных токенов, которые не являются JWT, выходят за рамки данной спецификации. Тем не менее, параметр запроса worker_token предоставляет средства для предоставления информации о желаемом актере, а утверждение act JWT может предоставить представление цепочки делегирования.

Ключевые слова «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ОБЯЗАТЕЛЬНО», «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ДОЛЖЕН», «НЕ ДОЛЖЕН», «РЕКОМЕНДУЕТСЯ», «НЕ РЕКОМЕНДУЕТСЯ», «МОЖЕТ» и « ДОПОЛНИТЕЛЬНО »в этом документе следует интерпретировать, как описано в BCP 14 [RFC2119] [RFC8174], когда и только когда они появляются заглавными буквами, как показано здесь.

В этой спецификации используются термины «тип токена доступа», «сервер авторизации», «клиент», «идентификатор клиента», «сервер ресурсов», «конечная точка токена», «запрос токена» и «ответ токена», определенные OAuth 2. .0, а также термины «Кодировка Base64url», «Утверждение» и «Набор утверждений JWT», определенные с помощью веб-токена JSON (JWT).

Клиент запрашивает маркер безопасности, отправляя запрос маркера в конечную точку маркера сервера авторизации, используя механизм типа предоставления расширения, определенный в разделе 4.5 [RFC6749].

Аутентификация клиента на сервере авторизации выполняется с использованием обычных механизмов, предоставляемых OAuth 2.0. Раздел 2.3.1 [RFC6749] определяет аутентификацию клиента на основе пароля, однако аутентификация клиента является расширяемой, и возможны другие механизмы.Например, [RFC7523] определяет аутентификацию клиента с использованием носителей JSON Web Tokens (JWT) [JWT]. Поддерживаемые методы аутентификации клиентов, а также разрешить или запретить неаутентифицированным или неопознанным клиентам являются решения о развертывании, которые принимаются на усмотрение сервера авторизации. Обратите внимание, что отсутствие аутентификации клиента позволяет использовать скомпрометированный токен через STS в другие токены любым лицом, владеющим скомпрометированным токеном. Таким образом, аутентификация клиента позволяет STS проводить дополнительные проверки авторизации в отношении того, каким объектам разрешено олицетворять или получать делегирование от других объектов.

Клиент делает запрос на обмен токеном к конечной точке токена с типом предоставления расширения, используя метод HTTP POST . Следующие параметры включены в тело объекта HTTP-запроса с использованием формата application / x-www-form-urlencoded с кодировкой символов UTF-8, как описано в Приложении B к RFC6749 [RFC6749].

grant_type
ТРЕБУЕТСЯ
. Значение urn: ietf: params: oauth: grant-type: token-exchange указывает, что выполняется обмен токенами.
ресурс

ДОПОЛНИТЕЛЬНО. URI, который указывает целевую службу или ресурс, где клиент намеревается использовать запрошенный маркер безопасности. Это позволяет серверу авторизации применять политику, подходящую для цели, например определять тип и содержимое выдаваемого токена, а также то, должен ли и как токен быть зашифрован. Во многих случаях клиент не будет знать логической организации систем, с которыми он взаимодействует, и будет знать только URI сервиса, в котором он намеревается использовать токен.Ресурс Параметр позволяет клиенту указать серверу авторизации, где он намеревается использовать выпущенный токен, указав местоположение, обычно как URL-адрес https, в запросе обмена токенами в той же форме, которая будет использоваться для доступа к этому ресурсу. . Сервер авторизации обычно имеет возможность отображать значение URI ресурса в соответствующую политику. Значение параметра ресурса ДОЛЖНО быть абсолютным URI, как указано в Разделе 4.3 [RFC3986], который МОЖЕТ включать компонент запроса и НЕ ДОЛЖЕН включать компонент фрагмента. Множественные параметры ресурса могут использоваться, чтобы указать, что выданный маркер предназначен для использования на множестве перечисленных ресурсов. См. [I-D.ietf-oauth-resource-sizes] для дополнительной информации и использования параметра resource .
аудитория

ДОПОЛНИТЕЛЬНО. Логическое имя целевой службы, в которой клиент намеревается использовать запрошенный маркер безопасности.Это служит цели, аналогичной параметру ресурса , но с клиентом, предоставляющим логическое имя для целевой службы. Интерпретация имени требует, чтобы значение было чем-то понятным как клиенту, так и серверу авторизации. Идентификатор клиента OAuth, идентификатор объекта SAML [OASIS.saml-core-2.0-os], идентификатор эмитента OpenID Connect [OpenID.Core] — вот примеры того, что можно использовать в качестве значений параметра аудитории . Однако значения аудитории , используемые с данным сервером авторизации, должны быть уникальными на этом сервере, чтобы гарантировать, что они правильно интерпретируются как предполагаемый тип значения.Множественные параметры аудитории могут использоваться, чтобы указать, что выпущенный токен предназначен для использования в нескольких перечисленных аудиториях. Параметры ресурса аудитории и ресурса могут использоваться вместе для указания нескольких целевых услуг с сочетанием логических имен и URI ресурсов.
область применения

ДОПОЛНИТЕЛЬНО. Список разделенных пробелами и чувствительных к регистру строк, как определено в разделе 3.3 [RFC6749], которые позволяют клиенту указать желаемую область действия запрошенного токена безопасности в контексте службы или ресурса, где этот токен будет использоваться. .Значения и связанная с ними семантика области действия зависят от службы и, как ожидается, будут описаны в соответствующей документации службы.
required_token_type

ДОПОЛНИТЕЛЬНО. Идентификатор, как описано в разделе 3, для типа запрошенного токена безопасности. Если запрошенный тип не указан, тип выданного токена остается на усмотрение сервера авторизации и может быть продиктован знанием требований службы или ресурса, указанных в параметре ресурса или аудитории .
subject_token
ТРЕБУЕТСЯ
. Маркер безопасности, представляющий личность стороны, от имени которой выполняется запрос. Обычно субъектом этого токена будет субъект токена безопасности, выпущенного в ответ на запрос.
subject_token_type
ТРЕБУЕТСЯ
. Идентификатор, как описано в разделе 3, который указывает тип маркера безопасности в параметре subject_token .
Actor_token

ДОПОЛНИТЕЛЬНО.Маркер безопасности, представляющий личность действующей стороны. Обычно это сторона, которая уполномочена использовать запрошенный токен безопасности и действовать от имени субъекта.
act_token_type

Идентификатор, как описано в разделе 3, который указывает тип маркера безопасности в параметре worker_token . Это ТРЕБУЕТСЯ, когда в запросе присутствует параметр actor_token , но НЕ ДОЛЖЕН быть включен в противном случае.

При обработке запроса сервер авторизации ДОЛЖЕН выполнить соответствующие процедуры проверки для указанного типа маркера и, если маркер субъекта присутствует, также выполнить соответствующие процедуры проверки для указанного типа маркера. Критерии действительности и подробности любого конкретного токена выходят за рамки этого документа и зависят от соответствующего типа токена и его содержимого.

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

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

Сервер авторизации может не желать или неспособен выполнить какой-либо запрос токена, но вероятность невыполнения запроса значительно выше, когда запрашиваются очень широкие права доступа. Таким образом, при отсутствии конкретных знаний о взаимосвязи систем в развертывании, клиенты должны проявлять усмотрение в отношении объема запрашиваемого доступа, особенно в отношении количества целевых служб. Сервер авторизации может использовать код ошибки invalid_target , определенный в разделе 2.2.2, чтобы сообщить клиенту, что он запросил доступ к слишком большому количеству целевых сервисов одновременно.

Сервер авторизации отвечает на запрос обмена маркером обычным ответом OAuth 2.0 от конечной точки маркера, как указано в разделе 5 [RFC6749]. Дополнительные сведения и объяснения приведены в следующих подразделах.

Если запрос действителен и соответствует всем политикам и другим критериям сервера авторизации, успешный токен-ответ создается путем добавления следующих параметров в тело объекта HTTP-ответа с использованием типа носителя «application / json», как указано по [RFC8259] и код состояния HTTP 200.Параметры сериализуются в структуру JavaScript Object Notation (JSON) путем добавления каждого параметра на верхнем уровне. Имена параметров и строковые значения включаются в виде строк JSON. Числовые значения включены в виде чисел JSON. Порядок параметров не имеет значения и может варьироваться.

access_token
ТРЕБУЕТСЯ
. Маркер безопасности, выданный сервером авторизации в ответ на запрос обмена маркером. Параметр access_token из раздела 5.1 [RFC6749] используется здесь для передачи запрошенного токена, что позволяет этому протоколу обмена токенами использовать существующие конструкции запроса и ответа OAuth 2.0, определенные для конечной точки токена. Идентификатор access_token используется по историческим причинам, и выданный токен не обязательно должен быть токеном доступа OAuth.
sold_token_type
ТРЕБУЕТСЯ
. Идентификатор, как описано в разделе 3, для представления выпущенного токена безопасности.
token_type
ТРЕБУЕТСЯ
.Значение без учета регистра, определяющее метод использования выданного токена доступа, как указано в разделе 7.1 [RFC6749]. Он предоставляет клиенту информацию о том, как использовать токен доступа для доступа к защищенным ресурсам. Например, значение Bearer , как указано в [RFC6750], указывает, что выданный токен безопасности является токеном-носителем, и клиент может просто представить его как есть без каких-либо дополнительных доказательств соответствия, помимо содержимого самого токена. Обратите внимание, что значение этого параметра отличается от значения параметра hibited_token_type , который объявляет представление выданного токена безопасности; термин «тип токена» чаще используется в вышеупомянутом значении как структурное или синтаксическое представление токена безопасности, как и во всех параметрах * _token_type в этой спецификации.Если выданный токен не является токеном доступа или не может использоваться в качестве токена доступа, то значение token_type N_A используется, чтобы указать, что идентификатор OAuth 2.0 token_type неприменим в этом контексте.
expires_in

РЕКОМЕНДУЕТСЯ. Срок действия токена, выданного сервером авторизации, в секундах. Часто у клиента нет желания или возможности проверять содержимое токена, и этот параметр обеспечивает непротиворечивую и независимую от типа токена индикацию того, как долго токен, как ожидается, будет действителен.Например, значение 1800 означает, что срок действия токена истечет через тридцать минут с момента создания ответа.
область применения

НЕОБЯЗАТЕЛЬНО, если область действия выданного токена безопасности идентична области, запрошенной клиентом; в противном случае ОБЯЗАТЕЛЬНО.
refresh_token

ДОПОЛНИТЕЛЬНО. Маркер обновления обычно не выдается, если обмен осуществляется одним временным учетным данными (subject_token) на другие временные учетные данные (выданный токен) для использования в каком-либо другом контексте.Токен обновления может быть выпущен в тех случаях, когда клиенту обмена токенами требуется возможность доступа к ресурсу, даже если исходные учетные данные больше не действительны (например, в сценариях отсутствия пользователя или в автономном режиме, когда пользователя больше не интересует активный сеанс с клиентом). Профили или развертывания этой спецификации должны четко задокументировать условия, при которых клиент должен ожидать токена обновления в ответ на запросы типа предоставления urn: ietf: params: oauth: grant-type: token-exchange .

Если сам запрос недействителен или если subject_token или actor_token недействительны по какой-либо причине или неприемлемы в зависимости от политики, сервер авторизации ДОЛЖЕН сформировать ответ об ошибке, как указано в разделе 5.2 [RFC6749] . Значение параметра error ДОЛЖНО быть кодом ошибки invalid_request .

Если сервер авторизации не желает или не может выдать токен для какой-либо целевой службы, указанной в параметрах ресурса или аудитории , в ответе об ошибке СЛЕДУЕТ использовать код ошибки invalid_target .

Сервер авторизации МОЖЕТ включать дополнительную информацию о причинах ошибки, используя error_description , как описано в разделе 5.2 [RFC6749].

При необходимости могут использоваться и другие коды ошибок.

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

На рис. 1 показан сервер ресурсов, получающий запрос защищенного ресурса, содержащий маркер доступа OAuth в заголовке авторизации, как указано в разделе 2.1 [RFC6750].

 GET / ресурс HTTP / 1.1
 Хост: frontend.example.com
 Авторизация: Bearer accVkjcJyb4BWCxGsndESCJQbdFMogUC5PbRDqceLTC
 

Рисунок 1: Запрос защищенного ресурса

На рисунке 2 сервер ресурсов принимает на себя роль клиента для обмена токенами, а токен доступа из запроса на рисунке 1 отправляется на сервер авторизации с использованием запроса, как указано в разделе 2.1. Значение параметра subject_token несет маркер доступа, а значение параметра subject_token_type указывает, что это маркер доступа OAuth 2.0. Сервер ресурсов, выступающий в роли клиента, использует свой идентификатор и секрет для аутентификации на сервере авторизации с использованием схемы аутентификации HTTP Basic. Ресурс Параметр указывает расположение серверной службы https://backend.example.com/api, где будет использоваться выпущенный токен.

 POST /as/token.oauth3 HTTP / 1.1
 Хост: as.example.com
 Авторизация: Базовая cnMwODpsb25nLXNlY3VyZS1yYW5kb20tc2VjcmV0
 Тип содержимого: application / x-www-form-urlencoded

 grant_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Agrant-type% 3Atoken-exchange
 & resource = https% 3A% 2F% 2Fbackend.example.com% 2Fapi
 & subject_token = accVkjcJyb4BWCxGsndESCJQbdFMogUC5PbRDqceLTC
 & subject_token_type =
  urn% 3Aietf% 3Aparams% 3Aoauth% 3Atoken-type% 3Aaccess_token
 

Рисунок 2: Запрос на обмен токена

Сервер авторизации проверяет учетные данные клиента и subject_token , представленные в запросе на обмен токенами.С помощью параметра ресурса сервер авторизации может определить соответствующую политику для применения к запросу и выдает токен, подходящий для использования, на https://backend.example.com. access_token Параметр ответа, показанного на рисунке 3, содержит новый токен, который сам является токеном доступа OAuth носителя, действительным в течение одной минуты. Маркер оказался JWT; тем не менее, его структура и формат непрозрачны для клиента, так что created_token_type указывает только на то, что это маркер доступа.

 HTTP / 1.1 200 ОК
 Тип содержимого: приложение / json
 Cache-Control: без кеширования, без хранения

 {
  "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IjllciJ9.eyJhdWQiOiJo
    dHRwczovL2JhY2tlbmQuZXhhbXBsZS5jb20iLCJpc3MiOiJodHRwczovL2FzLmV
    4YW1wbGUuY29tIiwiZXhwIjoxNDQxOTE3NTkzLCJpYXQiOjE0NDE5MTc1MzMsIn
    N1YiI6ImJkY0BleGFtcGxlLmNvbSIsInNjb3BlIjoiYXBpIn0.40y3ZgQedw6rx
    f59WlwHDD9jryFOr0_Wh4CGozQBihNBhnXEQgU85AI9x3KmsPottVMLPIWvmDCM
    y5-kdXjwhw ",
  "выданный_тоген_тип":
      "urn: ietf: params: oauth: token-type: access_token",
  "token_type": "На предъявителя",
  "expires_in": 60
 }
 

Рисунок 3: Ответ обмена токенами

Сервер ресурсов может затем использовать вновь полученный токен доступа при отправке запроса к внутреннему серверу, как показано на рисунке 4.

 GET / api HTTP / 1.1
 Хост: backend.example.com
 Авторизация: предъявитель eyJhbGciOiJFUzI1NiIsImtpZCI6IjllciJ9.eyJhdWQ
    iOiJodHRwczovL2JhY2tlbmQuZXhhbXBsZS5jb20iLCJpc3MiOiJodHRwczovL2
    FzLmV4YW1wbGUuY29tIiwiZXhwIjoxNDQxOTE3NTkzLCJpYXQiOjE0NDE5MTc1M
    zMsInN1YiI6ImJkY0BleGFtcGxlLmNvbSIsInNjb3BlIjoiYXBpIn0.40y3ZgQe
    dw6rxf59WlwHDD9jryFOr0_Wh4CGozQBihNBhnXEQgU85AI9x3KmsPottVMLPIW
    vmDCMy5-kdXjwhw
 

Рисунок 4: Запрос ресурсов, защищенных сервером

Дополнительные примеры можно найти в Приложении A.

Некоторые параметры в этой спецификации используют идентификатор в качестве значения для описания рассматриваемого токена. В частности, это параметры запроса requested_token_type , subject_token_type , Идентификаторы типа токена — это URI. Обмен токенов может работать как с токенами, выпущенными другими сторонами, так и с токенами с данного сервера авторизации. В первом случае идентификатор типа токена указывает на синтаксис (например,g., JWT или SAML 2.0), чтобы сервер авторизации мог его проанализировать; для последнего он указывает, для чего данный сервер авторизации выдал его (например, access_token или refresh_token).

В данной спецификации определены следующие идентификаторы типа токена. Другие URI МОГУТ использоваться для обозначения других типов токенов.

urn: ietf: params: oauth: token-type: access_token

Указывает, что токен является токеном доступа OAuth 2.0, выданным данным сервером авторизации.
urn: ietf: params: oauth: token-type: refresh_token

Указывает, что токен является токеном обновления OAuth 2.0, выданным данным сервером авторизации.
urn: ietf: params: oauth: token-type: id_token

Указывает, что токен является ID-токеном, как определено в Разделе 2 [OpenID.Core].
урна: ietf: params: oauth: token-type: saml1

Указывает, что токен является подтверждением SAML 1.1 [OASIS.saml-core-1.1] в кодировке base64url.
урна: ietf: params: oauth: token-type: saml2

Указывает, что токен является подтверждением SAML 2.0 [OASIS.saml-core-2.0-os] в кодировке base64url.

Значение urn: ietf: params: oauth: token-type: jwt , которое определено в разделе 9 [JWT], указывает, что токен является JWT.

Разница между токеном доступа и JWT тонкая. Маркер доступа представляет собой делегированное решение об авторизации, тогда как JWT — это формат токена.Маркер доступа может быть отформатирован как JWT, но не обязательно. И JWT вполне может быть токеном доступа, но не все JWT являются токенами доступа. Цель этой спецификации состоит в том, чтобы urn: ietf: params: oauth: token-type: access_token был индикатором того, что токен является типичным токеном доступа OAuth, выданным рассматриваемым сервером авторизации, непрозрачным для клиента и пригодным для использования таким же образом, как и любой другой токен доступа, полученный с этого сервера авторизации. (Это вполне может быть JWT, но клиент не знает об этом факте.) Принимая во внимание, что urn: ietf: params: oauth: token-type: jwt должен конкретно указать, что JWT запрашивается или отправляется (возможно, в случае междоменного использования, когда JWT используется в качестве разрешения авторизации для получить токен доступа с другого сервера авторизации, как это предусмотрено в [RFC7523]).

Обратите внимание, что для токенов, которые являются двоичными по своей природе, URI, используемый для их передачи, должен быть связан с семантикой base64 или другой кодировки, подходящей для использования с HTTP и OAuth.

Полезно иметь определенные механизмы для выражения делегирования внутри токена, а также для выражения авторизации для делегирования или олицетворения. Хотя описанный здесь протокол обмена токенами может использоваться с любым типом токена, в этом разделе определяются утверждения, выражающие такую ​​семантику специально для JWT и в ответе самоанализа токена OAuth 2.0. Подобные определения для других типов токенов возможны, но выходят за рамки данной спецификации.

Обратите внимание, что формула изобретения не изложена в данном документе, но используется в примерах и описаниях, таких как is , sub , exp и т. Д., определены [JWT].

Утверждение act (субъект) предоставляет в JWT средство для выражения того, что делегирование произошло, и идентификации действующей стороны, которой были делегированы полномочия. Значение act является объектом JSON, а члены объекта JSON являются утверждениями, которые идентифицируют актера. В утверждениях, составляющих акт , в заявлении указывается и, возможно, предоставляется дополнительная информация об актере. Например, комбинация двух пунктов заявки iss, и sub может быть необходима для однозначной идентификации актера.

Однако утверждения в рамках действия . Заявление относится только к личности исполнителя и не имеет отношения к действительности содержащего JWT таким же образом, как утверждения верхнего уровня. Следовательно, неидентификационные утверждения (например, exp , nbf и aud ) не имеют смысла при использовании в заявке act и поэтому не используются.

На рис. 5 показан акт , заявка (субъект) в наборе заявок JWT.Заявления самого токена относятся к [email protected], в то время как утверждение act указывает, что [email protected] является текущим субъектом.

 {
   "aud": "https://consumer.example.com",
   "iss": "https://issuer.example.com",
   «exp»: 14437,
   «nbf»: 1443

7, "sub": "[email protected]", "действовать": { "sub": "[email protected]" } }

Рисунок 5: Заявление об актере

Цепочка делегирования может быть выражена вложением одного утверждения act в другое.Самая внешняя заявка act представляет текущего актера, в то время как вложенные заявки act представляют предшествующих актеров. Самый молодой актер — самый глубоко вложенный. Вложенные заявлений действия служат в качестве исторической трассы, которая связывает первоначальный запрос и субъект посредством различных шагов делегирования, предпринимаемых до достижения текущего субъекта. В этом смысле считается, что текущий субъект включает всю историю авторизации / делегирования, что, естественно, приводит к описанной здесь вложенной структуре.

В целях применения политики управления доступом потребитель токена ДОЛЖЕН рассматривать только утверждения токена верхнего уровня и сторону, идентифицированную как текущий субъект в заявлении act . Предыдущие участники, идентифицированные любыми вложенными утверждениями act , являются только информационными и не должны учитываться при принятии решений по управлению доступом.

В следующем примере на рис. 6 показаны вложенные заявки на действие (субъект) в наборе заявок JWT. Заявления самого токена касаются user @ example.com, а в заявлении act указано, что система https://service16.example.com является текущим субъектом, а https://service77.example.com — предыдущим субъектом. Такой токен может появиться в результате того, что служба 16 принимает токен в вызове от службы 77 и обменивает его на токен, подходящий для вызова службы 26, в то время как сервер авторизации отмечает ситуацию во вновь выданном токене.

 {
   "aud": "https://service26.example.com",
   "iss": "https://issuer.example.com",
   «exp»: 14430,
   «НБФ»: 14430,
   "sub": "user @ example.com ",
   "действовать":
   {
     "sub": "https://service16.example.com",
     "действовать":
     {
       "sub": "https://service77.example.com"
     }
   }
 }
 

Рисунок 6. Вложенное утверждение актера

При включении в качестве члена верхнего уровня ответа самоанализа токена OAuth акт имеет ту же семантику и формат, что и утверждение с тем же именем.

Значением области является строка JSON, содержащая разделенный пробелами список областей, связанных с токеном, в формате, описанном в разделе 3.3 из [RFC6749].

На рис. 7 показана заявка области применения в наборе заявок JWT.

 {
   "aud": "https://consumer.example.com",
   "iss": "https://issuer.example.com",
   «exp»: 14437,
   «nbf»: 1443

7, "sub": "dgaf4mvfs75Fci_FL3heQA", "scope": "адрес телефона профиля электронной почты" }

Рисунок 7: Заявление об объемах

OAuth 2.0 Token Introspection уже определяет параметр scope для передачи областей, связанных с токеном.

Утверждение client_id содержит идентификатор клиента OAuth 2.0, который запросил маркер.

В следующем примере на рисунке 8 показано утверждение client_id в наборе утверждений JWT, указывающее на клиента OAuth 2.0 с идентификатором s6BhdRkqt3.

 {
   "aud": "https://consumer.example.com",
   "iss": "https://issuer.example.com",
   «exp»: 14437,
   "sub": "[email protected]",
   "client_id": "s6BhdRkqt3"
 }
 

Рисунок 8: Заявление об идентификаторе клиента

OAuth 2.0 Token Introspection уже определяет параметр client_id как идентификатор клиента для клиента OAuth 2.0, который запросил токен.

В заявлении may_act говорится, что одна сторона уполномочена стать действующей стороной и действовать от имени другой стороны. Утверждение может использоваться, например, когда subject_token представляется конечной точке токена в запросе на обмен токенами, а утверждение may_act в предметном токене может использоваться сервером авторизации для определения того, идентифицировал ли клиент (или сторону) в актер_токен ) уполномочен участвовать в запрошенном делегировании или олицетворении.Значение утверждения — это объект JSON, а члены в объекте JSON — это утверждения, которые идентифицируют сторону, которая, как утверждается, имеет право действовать от имени стороны, идентифицированной JWT, содержащим утверждение. Заявки, составляющие заявку may_act , идентифицируют и, возможно, предоставляют дополнительную информацию об авторизованном субъекте. Например, комбинация двух утверждений iss, и sub иногда необходима для однозначной идентификации авторизованного субъекта, в то время как утверждение электронной почты может использоваться для предоставления дополнительной полезной информации об этой стороне.

Однако заявки в заявке may_act относятся только к идентичности этой стороны и не имеют отношения к действительности содержащего JWT так же, как заявки верхнего уровня. Следовательно, такие утверждения, как exp , nbf и aud , не имеют смысла при использовании в заявке may_act и поэтому не используются.

На фиг.9 показано утверждение may_act в наборе заявлений JWT. Заявления самого токена касаются user @ example.com, а в заявлении may_act указано, что [email protected] уполномочен действовать от имени [email protected].

 {
   "aud": "https://consumer.example.com",
   "iss": "https://issuer.example.com",
   «exp»: 14437,
   «nbf»: 1443

7, "sub": "[email protected]", "may_act": { "sub": "[email protected]" } }

Рисунок 9: Заявление об уполномоченном действующем субъекте

При включении в качестве члена верхнего уровня ответа самоанализа токена OAuth, may_act имеет ту же семантику и формат, что и утверждение с тем же именем.

Большая часть рекомендаций из раздела 10 [RFC6749] «Соображения безопасности в структуре авторизации OAuth 2.0» также применима здесь. Кроме того, [RFC6819] содержит дополнительные соображения по безопасности для OAuth, а [I-D.ietf-oauth-security-themes] обновил руководство по безопасности, основанное на опыте развертывания и новых угрозах, появившихся после первоначальной публикации OAuth 2.0.

Все обычные проблемы безопасности, которые обсуждаются в [JWT], особенно в отношении сравнения URI и работы с нераспознанными значениями, также применимы здесь.

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

Токены

, используемые в контексте описанных здесь функций, могут содержать конфиденциальную информацию и, чтобы предотвратить раскрытие такой информации непреднамеренным сторонам, ДОЛЖНЫ передаваться только по зашифрованным каналам, таким как безопасность транспортного уровня (TLS).В случаях, когда желательно предотвратить раскрытие определенной информации клиенту, токен ДОЛЖЕН быть зашифрован для предполагаемого получателя. Развертывания ДОЛЖНЫ определять минимально необходимый объем данных и включать такую ​​информацию только в выпущенные токены. В некоторых случаях минимизация данных может включать представление только анонимного или псевдонимного пользователя.

Эта спецификация регистрирует следующие значения в реестре IANA «OAuth URI» [IANA.OAuth.Parameters], установленном [RFC6755].

  • URN: urn: ietf: params: oauth: grant-type: token-exchange
  • Общее имя: Тип предоставления доступа к обмену токенами для OAuth 2.0
  • Контроллер изменений: IESG
  • Спецификация: раздел 2.1 [[данной спецификации]]
  • URN: urn: ietf: params: oauth: token-type: access_token
  • Общее имя: URI типа токена для токена доступа OAuth 2.0
  • Контроллер изменений: IESG
  • Документ спецификации: Раздел 3 [[данной спецификации]]
  • URN: urn: ietf: params: oauth: token-type: refresh_token
  • Общее имя: URI типа токена для OAuth 2.0 токен обновления
  • Контроллер изменений: IESG
  • Документ спецификации: Раздел 3 [[данной спецификации]]
  • URN: urn: ietf: params: oauth: token-type: id_token
  • Общее имя: URI типа токена для идентификатора токена
  • Контроллер изменений: IESG
  • Документ спецификации: Раздел 3 [[данной спецификации]]
  • URN: urn: ietf: params: oauth: token-type: saml1
  • Общее имя: URI типа токена для SAML с кодировкой base64url 1.1 утверждение
  • Контроллер изменений: IESG
  • Документ спецификации: Раздел 3 [[данной спецификации]]
  • URN: urn: ietf: params: oauth: token-type: saml2
  • Общее имя: URI типа токена для утверждения SAML 2.0 с кодировкой base64url
  • Контроллер изменений: IESG
  • Документ спецификации: Раздел 3 [[данной спецификации]]

Эта спецификация регистрирует следующие значения в реестре IANA «Параметры OAuth» [IANA.OAuth.Parameters], установленный [RFC6749].

  • Имя параметра: ресурс
  • Место использования параметра: запрос токена
  • Контроллер изменений: IESG
  • Документ (ы) спецификации: Раздел 2.1 [[данной спецификации]]
  • Имя параметра: аудитория
  • Место использования параметра: запрос токена
  • Контроллер изменений: IESG
  • Документ (ы) спецификации: Раздел 2.1 [[данной спецификации]]
  • Имя параметра: required_token_type
  • Место использования параметра: запрос токена
  • Контроллер изменений: IESG
  • Технические характеристики: Раздел 2.1 из [[данной спецификации]]
  • Имя параметра: subject_token
  • Место использования параметра: запрос токена
  • Контроллер изменений: IESG
  • Документ (ы) спецификации: Раздел 2.1 [[данной спецификации]]
  • Имя параметра: subject_token_type
  • Место использования параметра: запрос токена
  • Контроллер изменений: IESG
  • Документ (ы) спецификации: Раздел 2.1 [[данной спецификации]]
  • Имя параметра: Actor_token
  • Место использования параметра: запрос токена
  • Контроллер изменений: IESG
  • Технические характеристики: Раздел 2.1 из [[данной спецификации]]
  • Имя параметра: Actor_token_type
  • Место использования параметра: запрос токена
  • Контроллер изменений: IESG
  • Документ (ы) спецификации: Раздел 2.1 [[данной спецификации]]
  • Имя параметра: Issue_token_type
  • Место использования параметра: ответ токена
  • Контроллер изменений: IESG
  • Документ (ы) спецификации: Раздел 2.2.1 [[данной спецификации]]

Эта спецификация регистрирует следующий тип маркера доступа в реестре IANA «Типы маркеров доступа OAuth» [IANA.OAuth.Parameters], установленный [RFC6749].

  • Название типа: N_A
  • Дополнительные параметры ответа конечной точки токена: (нет)
  • Схема (ы) аутентификации HTTP: (нет)
  • Контроллер изменений: IESG
  • Документ (ы) спецификации: Раздел 2.2.1 [[данной спецификации]]

Эта спецификация регистрирует следующие утверждения в реестре IANA «Заявки на веб-токены JSON» [IANA.JWT.Claims], установленном [JWT].

  • Название претензии: act
  • Описание претензии: Актёр
  • Контроллер изменений: IESG
  • Спецификация (-ы): Раздел 4.1 из [[данной спецификации]]
  • Название претензии: Объем
  • Описание претензии: значения объема
  • Контроллер изменений: IESG
  • Документ (ы) спецификаций: Раздел 4.2 [[данной спецификации]]
  • Название претензии: client_id
  • Описание претензии: идентификатор клиента
  • Контроллер изменений: IESG
  • Спецификация: Раздел 4.3 [[данной спецификации]]
  • Название претензии: may_act
  • Описание претензии: Уполномоченный участник — сторона, которая уполномочена стать действующим лицом
  • Контроллер изменений: IESG
  • Спецификация (-ы): Раздел 4.4 из [[данной спецификации]]

Эта спецификация регистрирует следующие значения в реестре IANA «OAuth Token Introspection Response» [IANA.OAuth.Parameters], установленном [RFC7662].

  • Название претензии: act
  • Описание претензии: Актёр
  • Контроллер изменений: IESG
  • Документ (ы) спецификаций: Раздел 4.1 [[данной спецификации]]
  • Название претензии: may_act
  • Описание претензии: Уполномоченный участник — сторона, которая уполномочена стать действующим лицом
  • Контроллер изменений: IESG
  • Спецификация (-ы): Раздел 4.4 из [[данной спецификации]]

Эта спецификация регистрирует следующие значения в реестре IANA «Ошибка расширений OAuth» [IANA.OAuth.Parameters], установленном [RFC6749].

  • Имя ошибки: invalid_target
  • Место использования ошибки: ответ об ошибке токена
  • Связанное расширение протокола: обмен токенами OAuth 2.0
  • Контроллер изменений: IETF
  • Документ (ы) спецификаций: Раздел 2.2.2 [[данной спецификации]]
[IANA.JWT.Claims] IANA, «Заявки на использование веб-токенов JSON»
[IANA.OAuth.Parameters] IANA, «Параметры OAuth»
[JWT] Джонс, М., Брэдли, Дж. И Н. Сакимура, «Веб-токен JSON (JWT)», RFC 7519, DOI 10.17487 / RFC7519, май 2015 г.
[RFC2119] Браднер, С., «Ключевые слова для использования в RFC для обозначения уровней требований», BCP 14, RFC 2119, DOI 10.17487 / RFC2119, март 1997 г.
[RFC3986] Бернерс-Ли, Т., Филдинг, Р. и Л. Масинтер, «Универсальный идентификатор ресурса (URI): общий синтаксис», STD 66, RFC 3986, DOI 10.17487 / RFC3986, январь 2005 г.
[RFC6749] Хардт Д., «Структура авторизации OAuth 2.0», RFC 6749, DOI 10.17487 / RFC6749, октябрь 2012 г.
[RFC7662] Ричер Дж. «OAuth 2.0 Token Introspection », RFC 7662, DOI 10.17487 / RFC7662, октябрь 2015 г.
[RFC8174] Лейба Б., «Неоднозначность прописных и строчных букв в ключевых словах RFC 2119», BCP 14, RFC 8174, DOI 10.17487 / RFC8174, май 2017 г.
[RFC8259] Брей, Т., «Формат обмена данными JavaScript Object Notation (JSON)», STD 90, RFC 8259, DOI 10.17487 / RFC8259, декабрь 2017 г.
[I-D.ietf-oauth-resource-sizes] Кэмпбелл Б., Брэдли Дж. И Х. Чофениг, «Индикаторы ресурсов для OAuth 2.0», Internet-Draft draft-ietf-oauth-resource-sizes-02, январь 2019 г.
[I-D.ietf-oauth-security-themes] Лоддерстедт, Т., Брэдли, Дж., Лабунец, А. и Д. Фетт, «Лучшие современные методы обеспечения безопасности OAuth 2.0», Internet-Draft draft-ietf-oauth-security-themes-13, июль 2019 г.
[OASIS.saml-core-1.1] Малер, Э., Мишра, П. и Р. Филпотт, «Утверждения и протокол для языка разметки утверждений безопасности OASIS (SAML) V1.1», OASIS Standard oasis-sstc-saml-core-1.1, сентябрь 2003 г.
[OASIS.saml-core-2.0-os] Кантор, С., Кемп, Дж., Филпотт, Р. и Э. Малер, «Утверждения и протокол для языка разметки утверждений безопасности OASIS (SAML) V2.0», OASIS Standard saml-core-2.0-os, март 2005 г.
[OpenID.Сердечник] Сакимура, Н., Брэдли, Дж., Джонс, М., де Медейрос, Б. и К. Мортимор, «OpenID Connect Core 1.0», ноябрь 2014 г.
[RFC6750] Джонс, М. и Д. Хардт, «The OAuth 2.0 Authorization Framework: Bearer Token Usage», RFC 6750, DOI 10.17487 / RFC6750, октябрь 2012 г.
[RFC6755] Кэмпбелл, Б. и Х. Чофениг, «Подпространство имен IETF URN для OAuth», RFC 6755, DOI 10.17487 / RFC6755, октябрь 2012 г.
[RFC6819] Lodderstedt, T., McGloin, M. и P. Hunt, «Модель угроз OAuth 2.0 и соображения безопасности», RFC 6819, DOI 10.17487 / RFC6819, январь 2013 г.
[RFC7521] Кэмпбелл, Б., Мортимор, К., Джонс, М. и Й. Голанд, «Структура утверждения для аутентификации клиентов OAuth 2.0 и грантов авторизации», RFC 7521, DOI 10.17487 / RFC7521, май 2015 г.
[RFC7523] Джонс, М., Кэмпбелл Б. и К. Мортимор, «Профиль веб-токена JSON (JWT) для аутентификации клиентов OAuth 2.0 и грантов авторизации», RFC 7523, DOI 10.17487 / RFC7523, май 2015 г.
[WS-Trust] Надалин, А., Гуднер, М., Гудгин, М., Барбир, А. и Х. Гранквист, «WS-Trust 1.4», февраль 2012 г.

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

В следующем запросе на обмен токенами клиент запрашивает токен с семантикой олицетворения (только с subject_token и без Actor_token , делегирование невозможно). Клиент сообщает серверу авторизации, что ему нужен токен для использования в целевой службе с логическим именем urn: example: кооперация-контекст .

 POST /as/token.oauth3 HTTP / 1.1
 Хост: as.example.com
 Тип содержимого: application / x-www-form-urlencoded

 grant_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Agrant-type% 3Atoken-exchange
 & audit = urn% 3Aexample% 3Acooperation-context
 & subject_token = eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwc
   zovL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXI
   uZXhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTA2MDAsIm5iZiI6MTQ0MTkwOTAwMCwic
   3ViIjoiYmRjQGV4YW1wbGUubmV0Iiwic2NvcGUiOiJvcmRlcnMgcHJvZmlsZSBoaXN
   0b3J5In0.PRBg-jXn4cJuj1gmYXFiGkZzRuzbXZ_sDxdE98ddW44ufsbWLKd3JJ1VZ
   hF64pbTtfjy4VXFVBDaQpKjn5JzAw
 & subject_token_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Atoken-type% 3Ajwt
 

Рисунок 10: Запрос на обмен токена

subject_token в предыдущем запросе — это JWT, и здесь показан декодированный набор утверждений JWT.JWT предназначен для использования сервером авторизации в течение определенного временного окна. Субъект JWT ( [email protected] ) — это сторона, от имени которой запрашивается новый токен.

  {
    "aud": "https://as.example.com",
    "iss": "https://original-issuer.example.net",
    «exp»: 1441
    0, «НБФ»: 14410, "sub": "[email protected]", "scope": "история профиля заказов" }

Рисунок 11: Предмет претензий по токенам

Параметр access_token в ответе на обмен токенами, показанном ниже, содержит новый токен, запрошенный клиентом.Другие параметры ответа указывают, что токен является токеном доступа носителя, срок действия которого истекает через час.

 HTTP / 1.1 200 ОК
 Тип содержимого: приложение / json
 Cache-Control: без кеширования, без хранения

 {
  "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IjcyIn0.eyJhdWQiOiJ1cm4
    6ZXhhbXBsZTpjb29wZXJhdGlvbi1jb250ZXh0IiwiaXNzIjoiaHR0cHM6Ly9hcy5l
    eGFtcGxlLmNvbSIsImV4cCI6MTQ0MTkxMzYxMCwic3ViIjoiYmRjQGV4YW1wbGUub
    mV0Iiwic2NvcGUiOiJvcmRlcnMgcHJvZmlsZSBoaXN0b3J5In0.rMdWpSGNACTvnF
    uOL74sYZ6MVuld2Z2WkGLmQeR9ztj6w2OXraQlkJmGjyiCq24kcB7AI2VqVxl3wSW
    НВХ85А ",
  "выданный_тоген_тип":
    "urn: ietf: params: oauth: token-type: access_token",
  "token_type": "На предъявителя",
  "expires_in": 3600
 }
 

Рисунок 12: Ответ обмена токенами

Декодированный набор заявлений JWT выданного токена показан ниже.Новый JWT выдается сервером авторизации и предназначен для использования системным объектом, известным под логическим именем urn: example: кооперация-контекст , в любое время до истечения срока его действия. Субъект ( sub ) JWT совпадает с субъектом токена, используемого для выполнения запроса, что эффективно позволяет клиенту олицетворять этот субъект в системном объекте, известном под логическим именем urn: пример: сотрудничество- контекст с помощью токена.

  {
    "aud": "urn: example: сотрудничество-контекст",
    "iss": "https: // as.example.com ",
    «exp»: 14410,
    "sub": "[email protected]",
    "scope": "история профиля заказов"
  }
 

Рисунок 13: Выпущенные заявки на токены

В следующем запросе обмена токенами клиент запрашивает токен и предоставляет как subject_token , так и актерский токен . Клиент сообщает серверу авторизации, что ему нужен токен для использования в целевой службе с логическим именем urn: example: кооперация-контекст . Политика на сервере авторизации требует, чтобы выданный токен был составным.

 POST /as/token.oauth3 HTTP / 1.1
 Хост: as.example.com
 Тип содержимого: application / x-www-form-urlencoded

 grant_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Agrant-type% 3Atoken-exchange
 & audit = urn% 3Aexample% 3Acooperation-context
 & subject_token = eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwc
   zovL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXI
   uZXhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTAwNjAsInNjb3BlIjoic3RhdHVzIGZlZ
   WQiLCJzdWIiOiJ1c2VyQGV4YW1wbGUubmV0IiwibWF5X2FjdCI6eyJzdWIiOiJhZG1
   pbkBleGFtcGxlLm5ldCJ9fQ.4rPRSWihQbpMIgAmAoqaJojAxj-p2X8_fAtAGTXrvM
   xU-eEZHnXqY0_AOZgLdxw5DyLzua8H_I10MCcckF-Q_g
 & subject_token_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Atoken-type% 3Ajwt
 & act_token = eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwczo
   vL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXIuZ
   XhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTAwNjAsInN1YiI6ImFkbWluQGV4YW1wbGU
   ubmV0In0.7YQ-3zPfhUvzje5oqw8COCvN5uP6NsKik9CVV6cAOf4QKgM-tKfiOwcgZ
   oUuDL2tEs6tqPlcBlMjiSzEjm3yBg
 & act_token_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Atoken-type% 3Ajwt
 

Рисунок 14: Запрос на обмен токена

subject_token в предыдущем запросе — это JWT, и здесь показан декодированный набор утверждений JWT.JWT предназначен для использования сервером авторизации до истечения определенного времени. Субъект JWT ( [email protected] ) — это сторона, от имени которой запрашивается новый токен.

  {
    "aud": "https://as.example.com",
    "iss": "https://original-issuer.example.net",
    «exp»: 14410,
    "scope": "статусный канал",
    "sub": "[email protected]",
    "may_act":
    {
      "sub": "[email protected]"
    }
  }
 

Рисунок 15: Предмет претензий по токенам

Actor_token в предыдущем запросе — это JWT, и здесь показан декодированный набор утверждений JWT.Этот JWT также предназначен для использования сервером авторизации до истечения определенного времени. Субъект JWT ( [email protected] ) — это субъект, который будет владеть запрошенным токеном безопасности.

  {
    "aud": "https://as.example.com",
    "iss": "https://original-issuer.example.net",
    «exp»: 14410,
    "sub": "[email protected]"
  }
 

Рисунок 16. Заявки на токены участника

Параметр access_token в ответе на обмен токенами, показанном ниже, содержит новый токен, запрошенный клиентом.Другие параметры ответа указывают, что токен является JWT, срок действия которого истекает через час, и что тип токена доступа неприменим, поскольку выданный токен не является токеном доступа.

 HTTP / 1.1 200 ОК
 Тип содержимого: приложение / json
 Cache-Control: без кеширования, без хранения

 {
  "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IjcyIn0.eyJhdWQiOiJ1cm4
    6ZXhhbXBsZTpjb29wZXJhdGlvbi1jb250ZXh0IiwiaXNzIjoiaHR0cHM6Ly9hcy5l
    eGFtcGxlLmNvbSIsImV4cCI6MTQ0MTkxMzYxMCwic2NvcGUiOiJzdGF0dXMgZmVlZ
    CIsInN1YiI6InVzZXJAZXhhbXBsZS5uZXQiLCJhY3QiOnsic3ViIjoiYWRtaW5AZX
    hhbXBsZS5uZXQifX0.3paKl9UySKYB5ng6_cUtQ2qlO8Rc_y7Mea7IwEXTcYbNdwG
    9-G1EKCFe5fW3H0hwX-MSZ49Wpcb1SiAZaOQBtw ",
  "тип_токена": "urn: ietf: params: oauth: тип-токена: jwt",
  "token_type": "N_A",
  "expires_in": 3600
 }
 

Рисунок 17: Ответ обмена токенами

Декодированный набор заявлений JWT выданного токена показан ниже. Новый JWT выдается сервером авторизации и предназначен для использования системным объектом, известным под логическим именем urn: example: кооперация-контекст , в любое время до истечения срока его действия.Тема ( sub ) JWT такая же, как тема subject_token , используемого для выполнения запроса. Актер ( act ) JWT совпадает с субъектом Actor_token , используемого для выполнения запроса. Это указывает на делегирование и определяет [email protected] как текущий субъект, которому были делегированы полномочия действовать от имени [email protected] .

  {
    "aud": "urn: example: сотрудничество-контекст",
    "iss": "https: // as.example.com ",
    «exp»: 14410,
    "scope": "статусный канал",
    "sub": "[email protected]",
    "действовать":
    {
      "sub": "[email protected]"
    }
  }
 

Рисунок 18: Выпущенные заявки на токены

Эта спецификация была разработана в рамках рабочей группы OAuth, в которую входят десятки активных и преданных делу участников. Он был подготовлен под председательством Ханнеса Чофенига, Дерека Аткинса и Рифаата Шех-Юсефа с Кэтлин Мориарти, Стивеном Фарреллом, Эриком Рескорла, Романом Даниливом и Бенджамином Кадуком, которые выполняли обязанности директоров по вопросам безопасности.Следующие люди внесли идеи, отзывы и формулировки в эту спецификацию:

Калеб Бейкер, Витторио Берточчи, Майк Браун, Томас Бройер, Роман Данилив, Уильям Деннисс, Владимир Джувинов, Эрик Фазендин, Фил Хант, Бенджамин Кадук, Джейсон Кегловиц, Торстен Лоддерстедт, Барри Лейба, Адам Льюис, Джеймс Мангер, Нов Матаке, Нов Матаке, Миллер, Хилари Орман, Мэтью Перри, Эрик Рескорла, Джастин Ричер, Адам Роуч, Рифат Шех-Юсеф, Скотт Томилсон и Ханнес Чофениг.

[[будет удалено редактором RFC перед публикацией как RFC]]

-19

  • Исправления, внесенные в -18.
  • Исправьте недопустимый JSON в примере утверждения вложенного актера.
  • Ссылочные номера рисунков в тексте при представлении примеров в разделах 2 и 4.
  • Редакционные обновления из дополнительных оценочных комментариев IESG.
  • Добавить информационную ссылку на ietf-oauth-resource-sizes
  • Обновите ietf-oauth-security-themes ref до 13

-18

  • Редакционные обновления на основе еще нескольких оценочных комментариев IESG.

-17

  • Редакционные улучшения и примеры исправлений, полученные на основе оценочных комментариев IESG.
  • Добавлен указатель на Приложение B. RFC6749 «Использование типа носителя application / x-www-form-urlencoded» как способ предоставления нормативного цитирования (посредством ссылки) для типа носителя.
  • Усилены некоторые формулировки в соображениях конфиденциальности, чтобы привести их в соответствие с RFC 7519 Sec. 12 и RFC 6749 Sec. 10.8.

-16

  • Исправлена ​​опечатка и добавлено AD в Благодарности.

-15

  • Обновлен пример утверждения вложенных субъектов, чтобы (надеюсь) быть более простым.
  • Переработаны соображения конфиденциальности, чтобы сказать об использовании TLS при передаче, минимизировать объем информации в токене и зашифровать токен, если раскрытие его информации клиенту вызывает озабоченность, согласно https://mailarchive.ietf.org/arch/msg / secdir / KJhx4aq_U5uk3k6zpYP-CEHbpVM
  • Разделы «Вопросы безопасности и конфиденциальности» перемещены в раздел «Вопросы IANA».

-14

  • В раздел 4.1 добавлен текст о заявлении «действие», в котором говорится, что только заявки верхнего уровня и текущий субъект должны учитываться при применении решений по управлению доступом.

-13

  • Обновлен синтаксис имени и значения утверждения для области, чтобы они соответствовали обработке области в RFC 7662 OAuth 2.0 Token Introspection.
  • Обновлено имя утверждения идентификатора клиента, чтобы оно соответствовало обработке идентификатора клиента в RFC 7662 OAuth 2.0 Token Introspection.

-12

  • Обновлено для использования шаблона из RFC 8174.

-11

  • Добавлен новый председатель WG и AD в Благодарности.
  • Примененные пояснения, предложенные во время проверки AD EKR.

-10

  • Определенные URI типа токена для утверждений SAML 1.1 и SAML 2.0 с кодировкой base64url.
  • Применены редакционные исправления.

-09

  • В соответствии с предложением WGLC «полученные маркеры безопасности могут использоваться в ряде контекстов» на «полученные маркеры безопасности могут использоваться в нескольких контекстах».
  • Разъяснено, что действительность токена субъекта или субъекта не влияет на действительность выданного токена после того, как обмен произошел согласно комментарию WGLC.
  • Изменено использование кода ошибки invalid_target на СЛЕДУЕТ для комментария WGLC.
  • Уточнен текст о том, что утверждения об отсутствии идентичности в заявлении «act» не имеют смысла для комментария WGLC.
  • Добавлен краткий раздел по вопросам конфиденциальности для комментариев WGLC.

-08

  • Используйте ссылку bibxml для OpenID.Core, а не определяйте ее в строке.
  • Добавлена ​​роль редактора для Кэмпбелла.
  • Незначительное уточнение текста для актера_token.

-07

  • Исправлена ​​опечатка (осквернение -> осмотрительность).
  • Добавлено объяснение взаимосвязи между областью действия, аудиторией и ресурсом в запросе и добавлен код ошибки «invalid_target», позволяющий AS сообщать клиенту, что запрашиваемые аудитории / ресурсы слишком широки.

-06

  • Удалите из заголовка «STS for the REST of Us».
  • Уберите слова «тяжелый» и «легкий» из аннотации и введения.
  • Разъяснения относительно языка вокруг xxxxxx_token_type.
  • Удалите параметр want_composite.
  • Добавьте краткое упоминание жетонов стиля доказательства владения во введение и удалите соответствующую открытую проблему.

-05

  • Определен запрос JWT cid для выражения идентификатора клиента OAuth 2.0 клиента, который запросил токен.
  • Определена и запрошена регистрация для act и may_act в качестве параметров ответа самоанализа токена (помимо заявлений JWT).
  • Ослабьте формулировку о refresh_token в ответе на НЕОБЯЗАТЕЛЬНО из НЕ РЕКОМЕНДУЕТСЯ на основе обратной связи из реального опыта развертывания.
  • Добавьте поясняющий текст о различии между JWT и URI токена доступа.
  • Закройте (удалите) некоторые решенные маркеры открытых проблем.

-04

  • Уточнено, что параметры запроса «ресурс» и «аудитория» могут использоваться одновременно (через http: // www.ietf.org/mail-archive/web/oauth/current/msg15335.html).
  • Уточнена действительность токена субъекта / субъекта после обмена токенами и немного подробнее разъяснена рекомендация не выдавать токены обновления (через http://www.ietf.org/mail-archive/web/oauth/current/msg15318.html).
  • В приложении с примерами обновлено использование значения эмитента, которое не означает, что клиент выпустил и подписал токены и использовал «Bearer» и «urn: ietf: params: oauth: token-type: access_token» в одном из ответов ( через http: // www.ietf.org/mail-archive/web/oauth/current/msg15335.html).
  • Определенная и зарегистрированная urn: ietf: params: oauth: token-type: id_token, поскольку в некоторых случаях использования выполняется обмен токенами для токенов идентификатора, и ранее не был определен URI, указывающий, что токен является токеном идентификатора.

-03

  • Обновлены редакторы документов (добавлены Кэмпбелл, Брэдли и Мортимор).
  • Добавлен в заголовок.
  • Добавлено в аннотацию и введение.
  • Обновлен формат запроса для использования параметров запроса application / x-www-form-urlencoded и ответа для использования существующих параметров JSON конечной точки токена, определенных в OAuth 2.0.
  • Изменил идентификатор типа гранта на urn: ietf: params: oauth: grant-type: token-exchange.
  • Добавлены запросы регистрации RFC 6755 для urn: ietf: params: oauth: token-type: refresh_token, urn: ietf: params: oauth: token-type: access_token и urn: ietf: params: oauth: grant-type: token- обмен.
  • Добавлены запросы регистрации RFC 6749 для параметров запроса / ответа.
  • Удалены вопросы реализации и требование поддержки JWT.
  • Разъяснены многие аспекты текста.
  • Изменен on_behalf_of на subject_token , on_behalf_of_token_type на subject_token_type , act_as на токен-исполнителя и act_as_token_type на тип_token_type .
  • Добавлен параметр запроса аудитории , используемый для указания логических имен целевых служб, в которых клиент намеревается использовать запрошенный маркер безопасности.
  • Добавлен параметр запроса want_composite , используемый для указания желания составного токена, а не попытки сделать вывод о его наличии / отсутствии токена (ов) в запросе.
  • Добавлен параметр запроса ресурса , используемый для указания URL-адресов ресурсов, в которых клиент намеревается использовать запрошенный маркер безопасности.
  • Указывает, что могут использоваться значения параметров запроса нескольких ресурсов аудитории и ресурсов .
  • Определено требование JWT act (актер) для выражения текущего актера или участника делегирования.
  • Определил претензию JWT may_act , чтобы указать, что одна сторона уполномочена действовать от имени другой стороны.
  • Определено утверждение JWT scp (области действия) для выражения значений токена области действия OAuth 2.0.
  • Добавлено определение N_A (не применимо) OAuth Access Token Type для использования в контекстах, в которых синтаксис обмена токенами требует token_type значение, но в которых выдаваемый токен не является токеном доступа.
  • Добавлены примеры.

-02

  • Разрешено использование типов токенов безопасности, отличных от JWT, для значений запроса act_as и on_behalf_of .
  • Ссылка на RFC с утверждениями JWT и OAuth.

-01

-00

  • Создан первоначальный черновик рабочей группы из draft-jones-oauth-token-exchange-01.

Token Exchange — Служба авторизации

Мы рекомендуем использовать Token Exchange только в том случае, если вам нужно обменивать токены авторизованных пользователей из одного приложения в другое.Если вам просто нужно вызвать REST API, используя учетные данные клиента , проверьте API Access.

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

Вы можете сделать это, если, например, вы хотите позвонить в Служба авторизации API.

Запросить разрешения на обмен токенами

На портале приложений выберите Обмен токенов для вашей регистрации в OIDC.

Теперь выберите «Запросить разрешение на обмен токенами» и найдите целевое приложение. Например, API службы авторизации.

Сделайте запрос на обмен токена в CERN SSO

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

  curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = СЕКРЕТНО" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "subject_token =.... "\
    --data-urlencode "required_token_type = urn: ietf: params: oauth: token-type: refresh_token" \
    -d "аудитория = целевой клиент" \
    https://auth.cern.ch/auth/realms/cern/protocol/openid-connect/token
  

Необходимо указать следующие поля:

Поле значение
client_id clientId ваше приложение
client_secret (необязательно) КлиентСекрет ваше приложение (не требуется для общедоступных клиентов)
subject_token Маркер доступа, который вы получили для , ваше приложение
аудитория clientId целевого приложения
grant_type urn: ietf: params: oauth: grant-type: token-exchange
required_token_type urn: ietf: params: oauth: token-type: refresh_token (который возвращает маркеры обновления и доступа), urn: ietf: params: oauth: token-type: access_token или urn: ietf: params: oauth : тип токена: id_token

Более подробную информацию можно найти в документации Keycloak.

Используйте обмененный токен

CERN SSO вернет ответ JSON, содержащий токен доступа, созданный для целевое приложение вместе с токеном обновления. Более подробную информацию можно найти в Документация Keycloak.

Обмен токенов и роли

После обмена токеном новый токен будет содержать роли зарегистрированного удостоверения для целевого приложения. Это не позволяет исходному приложению определять свои собственные роли для целевого приложения. Результат всегда не такой наглядный, поэтому рассмотрим его на примере:

  • У нас есть приложение TOOL , которое хочет обменять токены учетных данных клиента на API .
  • Владелец TOOL определяет роль tool_itself и связывает ее с идентификатором приложения TOOL .
  • Владелец API определяет роль api_user и связывает ее с идентификатором приложения TOOL .
  • Владелец API определяет роль api_itself и связывает ее с Application Identity API .
  • Владелец API предоставляет разрешения на обмен токенами идентификатору приложения TOOL .

Если API получает токен учетных данных клиента для себя, он будет содержать роль api_itself .

Когда TOOL получает токен учетных данных клиента, он содержит роль tool_itself и аудиторию TOOL .

При обмене этого токена с API у нового токена будет новая аудитория ( API ), и единственная роль будет api_user (и она не будет содержать роли tool_itself или api_itself ) .

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

keycloak-documentation / token-exchange.adoc at master · keycloak / keycloak-documentation · GitHub

keycloak-documentation / token-exchange.adoc at master · keycloak / keycloak-documentation · GitHub Постоянная ссылка

Обмен токенов

Примечание

Чтобы использовать обмен токенами, вы также должны включить функцию admin_fine_grained_authz .Пожалуйста, взгляните на {installguide_profile_name}.

В {project_name} обмен токенами — это процесс использования набора учетных данных или токена для получения совершенно другого токена. Клиент может захотеть вызвать менее надежное приложение, поэтому он может захотеть понизить версию текущего токена, который у него есть. Клиент может обменять токен {project_name} на токен, хранящийся для связанной учетной записи социального провайдера. Вы можете доверять внешним токенам, созданным другими областями {project_name} или иностранными IDP.У клиента может быть потребность выдавать себя за пользователя. Вот краткое описание текущих возможностей {project_name} по обмену токенами.

  • Клиент может обменять существующий токен {project_name}, созданный для определенного клиента, на новый токен, предназначенный для другого клиента

  • Клиент может обменять существующий токен {project_name} на внешний токен, то есть связанный аккаунт Facebook

  • Клиент может обменять внешний токен на токен {project_name}.

  • Клиент может выдавать себя за пользователя

Обмен токенами в {project_name} — очень свободная реализация спецификации обмена токенами OAuth в IETF. Мы немного расширили его, проигнорировали некоторые из них и вольно интерпретировали другие части спецификации. это простой вызов типа гранта в конечной точке токена OpenID Connect области.

 / auth / realms / {область} / протокол / openid-connect / токен 

Он принимает параметры формы ( application / x-www-form-urlencoded ) в качестве ввода, а вывод зависит от типа токена, на который вы запросили обмен.Обмен токенами — это конечная точка клиента, поэтому запросы должны предоставлять информацию аутентификации для вызывающего клиента. Общедоступные клиенты указывают свой идентификатор клиента в качестве параметра формы. Конфиденциальные клиенты также могут использовать параметры формы для передачи их идентификатора и секрета клиента, Basic Auth, или, как бы то ни было, ваш администратор настроил поток аутентификации клиента в вашем область. Вот список параметров формы

client_id

ТРЕБУЕТСЯ МОЖЕТ БЫТЬ. Этот параметр необходим для клиентов, использующих параметры формы для аутентификации.Если вы используете Обычная проверка подлинности, клиентский токен JWT или проверка подлинности сертификата клиента, не указывайте этот параметр.

client_secret

ТРЕБУЕТСЯ МОЖЕТ БЫТЬ . Этот параметр необходим для клиентов, использующих параметры формы для аутентификации и использующих секрет клиента в качестве учетных данных. Не указывайте этот параметр, если вызовы клиентов в вашей области аутентифицируются другими способами.

grant_type

ТРЕБУЕТСЯ. Значение параметра должно быть urn: ietf: params: oauth: grant-type: token-exchange .

subject_token

ДОПОЛНИТЕЛЬНО. Маркер безопасности, представляющий личность стороны, от имени которой делается запрос. Это необходимо, если вы обмениваете существующий токен на новый.

subject_issuer

ДОПОЛНИТЕЛЬНО. Идентифицирует эмитента subject_token .Его можно оставить пустым, если токен поступает из текущей области или если эмитент можно определить из subject_token_type . В противном случае необходимо указать. Допустимые значения — это псевдоним Identity Provider , настроенный для вашей области. Или идентификатор заявки эмитента настроен конкретным поставщиком удостоверений .

subject_token_type

ДОПОЛНИТЕЛЬНО. Этот параметр представляет собой тип токена, переданного с параметром subject_token .Это по умолчанию на urn: ietf: params: oauth: token-type: access_token , если subject_token поступает из области и является токеном доступа. Если это внешний токен, этот параметр может или не может быть указан в зависимости от требований subject_issuer .

required_token_type

ДОПОЛНИТЕЛЬНО. Этот параметр представляет тип токена, на который клиент хочет обменяться. В настоящее время только oauth поддерживаются типы токенов OpenID Connect.Значение по умолчанию для этого зависит от того, это urn: ietf: params: oauth: token-type: refresh_token , и в этом случае вам будет возвращен как токен доступа, так и обновление токен в ответе. Другие подходящие значения: urn: ietf: params: oauth: token-type: access_token и urn: ietf: params: oauth: token-type: id_token

аудитория

ДОПОЛНИТЕЛЬНО. Этот параметр указывает целевого клиента, для которого вы хотите создать новый токен.

required_issuer

ДОПОЛНИТЕЛЬНО. Этот параметр указывает, что клиент хочет, чтобы токен был создан внешним поставщиком. Это должно быть псевдонимом Identity Provider , настроенного в области.

required_subject

ДОПОЛНИТЕЛЬНО. Указывает имя пользователя или идентификатор пользователя, если ваш клиент хочет выдать себя за другого пользователя.

область применения

НЕ ВЫПОЛНЯЕТСЯ. Этот параметр представляет целевой набор областей OAuth и OpenID Connect для клиента. запрашивает. В настоящее время он не реализован, но будет, когда {project_name} получит лучшую поддержку для объемы в целом.

Примечание

В настоящее время мы поддерживаем только обмены OpenID Connect и OAuth. Поддержка клиентов на основе SAML и поставщиков удостоверений может быть добавлена ​​в будущем в зависимости от потребностей пользователей.

Успешный ответ от вызова обмена вернет код ответа HTTP 200 с типом содержимого, который зависит от типа запрошенного маркера и запрошенного_представителя , запрашиваемого клиентом.Типы токенов, запрошенных OAuth, будут возвращены документ JSON, как описано в спецификации обмена токенами OAuth.

 {
   "access_token": ".....",
   "refresh_token": ".....",
   "истекает" : "...."
 } 

Клиенты, запрашивающие токен обновления, получат в ответ как токен доступа, так и токен обновления. Клиенты только запрашивающие Тип токена доступа получит только токен доступа в ответе. Информация об истечении срока может быть включена или не включена для клиенты, запрашивающие внешнего эмитента через параметр requested_issuer .

Ответы об ошибках обычно подпадают под категорию кода ответа HTTP 400, но могут быть возвращены другие коды состояния ошибки. в зависимости от серьезности ошибки. Ответы об ошибках могут включать содержимое в зависимости от required_issuer . Обмены на основе OAuth могут возвращать документ JSON следующего вида:

 {
   "ошибка" : "...."
   "error_description": "...."
} 

В зависимости от типа обмена могут быть возвращены дополнительные сообщения об ошибках. Например, поставщики удостоверений OAuth могут включать дополнительное требование account-link-url , если у пользователя нет ссылки на поставщика удостоверений.Эту ссылку можно использовать для инициированного клиентом запроса на установление связи.

Примечание

Для настройки обмена токенами требуется знание мелких прав администратора (см. {Adminguide_name} для получения дополнительной информации). Вам нужно будет предоставить клиентам разрешение на обмен. Это обсуждается более подробно позже в этой главе.

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

Внутренний токен для внутреннего обмена токенами

При внутреннем обмене токена на токен у вас есть существующий токен, отчеканенный для определенного клиента, и вы хотите обменять этот токен для нового, отчеканенного для другого целевого клиента. Зачем тебе это нужно? Это обычно бывает когда у клиента есть токен, отчеканенный для себя, и ему нужно делать дополнительные запросы к другим приложениям, требующим другого утверждения и разрешения в токене доступа.Другой причиной, по которой может потребоваться этот тип обмена, является то, что вы необходимо выполнить «понижение уровня разрешений», когда ваше приложение должно вызывать менее надежное приложение, а вы не хотите для распространения вашего текущего токена доступа.

Предоставление разрешения на обмен

Клиенты, которые хотят обменять токены на другого клиента, должны быть авторизованы в консоли администратора для этого. Вам нужно будет определить мелкое разрешение token-exchange для целевого клиента, которому вы хотите разрешить обмен.

Разрешение целевого клиента

Установите переключатель Permissions Enabled в положение ON.

Разрешение целевого клиента

На странице должна появиться ссылка token-exchange . Щелкните это, чтобы начать определение разрешения. Это принесет вам на эту страницу.

Настройка разрешений на обмен целевым клиентом

Вам необходимо определить политику для этого разрешения. Щелкните ссылку Authorization , перейдите на вкладку Policies и создайте Политика клиента .

Создание клиентской политики

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

Применить политику клиента

Теперь у вашего клиента есть разрешение на вызов. Если вы сделаете это неправильно, вы получите ответ 403 Forbidden, если вы попробуйте произвести обмен.

Запрос

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

 curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = секрет клиента" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "subject_token =.... "\
    --data-urlencode "required_token_type = urn: ietf: params: oauth: token-type: refresh_token" \
    -d "аудитория = целевой клиент" \
    http: // локальный: 8080 / auth / realms / myrealm / протокол / openid-connect / токен 

Параметр subject_token должен быть токеном доступа для целевой области. Если ваш required_token_type параметр является типом токена обновления, то ответ будет содержать как токен доступа, так и токен обновления и срок действия. Вот пример ответа JSON, полученного вами после этого вызова.

 {
   "access_token": "....",
   "refresh_token": "....",
   "expires_in": 3600
} 

Внутренний токен для обмена внешними токенами

Вы можете обменять токен области на внешний токен, созданный внешним поставщиком удостоверений. Этот внешний поставщик удостоверений должен быть настроен в разделе Identity Provider консоли администратора. В настоящее время только внешние устройства на основе OAuth / OpenID Connect. Поддерживаются поставщики удостоверений, в том числе все поставщики социальных сетей.{project_name} не выполняет обратный обмен с внешним провайдером. Итак, если аккаунт не привязан, вы не сможете получить внешний токен. Чтобы иметь возможность получить внешний токен, один из эти условия должны быть выполнены:

  • Пользователь должен войти в систему с помощью внешнего поставщика удостоверений хотя бы один раз

  • Пользователь должен быть связан с внешним поставщиком удостоверений через службу учетных записей пользователей

  • Учетная запись пользователя была связана через внешнего поставщика удостоверений с использованием API связывания учетной записи, инициированной клиентом.

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

Если учетная запись не привязана, ответ обмена будет содержать ссылку, которую вы можете использовать для ее установления. Это более подробно обсуждается в разделе «Создание запроса».

Предоставление разрешения на обмен

Запросы на обмен между внутренними и внешними токенами будут отклонены с ответом 403, Запрещено, пока вы не предоставите разрешение вызывающему клиенту обмениваться токенами с внешним поставщиком удостоверений.Чтобы дать разрешение Для клиента необходимо перейти на страницу конфигурации поставщика удостоверений на вкладку Permissions .

Разрешение поставщика удостоверений

Установите переключатель Permissions Enabled в положение true.

Разрешение поставщика удостоверений

На странице должна появиться ссылка token-exchange . Щелкните это, чтобы начать определение разрешения. Это принесет вам на эту страницу.

Настройка разрешений для обмена с поставщиком удостоверений

Вам необходимо определить политику для этого разрешения.Щелкните ссылку Authorization , перейдите на вкладку Policies и создайте Политика клиента .

Создание клиентской политики

Здесь вы вводите начального клиента, то есть аутентифицированного клиента, который запрашивает обмен токенами. После вас создайте эту политику, вернитесь к разрешению поставщика удостоверений token-exchange и добавьте политику клиента, которую вы только что определенный.

Применить политику клиента

Теперь у вашего клиента есть разрешение на вызов.Если вы сделаете это неправильно, вы получите ответ 403 Forbidden, если вы попробуйте произвести обмен.

Запрос

Когда ваш клиент обменивает существующий внутренний токен на внешний, вы должны предоставить required_issuer параметр. Параметр должен быть псевдонимом настроенного поставщика удостоверений.

 curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = секрет клиента" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "subject_token =.... "\
    --data-urlencode "required_token_type = urn: ietf: params: oauth: token-type: access_token" \
    -d "required_issuer = google" \
    http: // локальный: 8080 / auth / realms / myrealm / протокол / openid-connect / токен 

Параметр subject_token должен быть токеном доступа для целевой области. Параметр requested_token_type должно быть urn: ietf: params: oauth: token-type: access_token или оставить пустым. Никакой другой запрошенный тип токена не поддерживается В настоящее время.Вот пример успешного ответа JSON, полученного вами после этого вызова.

 {
   "access_token": "....",
   "expires_in": 3600
   "URL-адрес-ссылки-аккаунта": "https: // ...."
} 

Если внешний поставщик удостоверений не связан по какой-либо причине, вы получите код ответа HTTP 400 с этот документ JSON:

 {
   "ошибка" : "....",
   "error_description": "..."
   "URL-адрес-ссылки": "https: // ...."
} 

Ошибка Заявление будет либо token_expired , либо not_linked .Предоставлено утверждение account-link-url чтобы клиент мог выполнить привязку учетной записи, инициированную клиентом. Большинство (все?) провайдеры требуют связывания через протокол OAuth браузера. С account-link-url просто добавьте redirect_uri параметр запроса к нему, и вы можете перенаправить браузеры для выполнения ссылки.

Внешний токен для внутреннего обмена токенами

Вы можете доверять внешним токенам, созданным внешними поставщиками удостоверений, и обменивать их на внутренние токены.Это может быть используется для моста между мирами или просто для того, чтобы доверять токенам от вашего социального провайдера. Работает аналогично провайдеру удостоверений. вход в браузер, в котором новый пользователь импортируется в вашу область, если он не существует.

Примечание

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

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

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

Примечание

Поставщики удостоверений SAML в настоящее время не поддерживаются. Токены Twitter также не подлежат обмену.
Предоставление разрешения на обмен

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

Запрос

subject_token_type должен быть urn: ietf: params: oauth: token-type: access_token или urn: ietf: params: oauth: token-type: jwt . Если типом является urn: ietf: params: oauth: token-type: access_token , вы должны указать параметр subject_issuer , и это должен быть псевдоним настроенного поставщика удостоверений. Если типом является urn: ietf: params: oauth: token-type: jwt , поставщик будет сопоставлен через эмитент утверждает в JWT, который должен быть псевдонимом провайдера или зарегистрированным эмитентом в конфигурации провайдера.

Для проверки, если токен является токеном доступа, для проверки токена будет вызвана служба информации о пользователе провайдера. Удачный звонок будет означать, что токен доступа действителен. Если предметный токен является JWT и если у поставщика включена проверка подписи, это будет предпринято, в противном случае он по умолчанию также будет вызывать информационную службу пользователя для проверки токена.

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

 curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = секрет клиента" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "subject_token = ...." \
    -d "subject_issuer = myOidcProvider" \
    --data-urlencode "subject_token_type = urn: ietf: params: oauth: token-type: access_token" \
    -d "аудитория = целевой клиент" \
    http: // локальный: 8080 / auth / realms / myrealm / протокол / openid-connect / токен 

Если у вас параметр required_token_type является типом токена обновления, то ответ будет содержать как токен доступа, так и токен обновления и срок действия.Вот пример ответа JSON, полученного вами после этого вызова.

 {
   "access_token": "....",
   "refresh_token": "....",
   "expires_in": 3600
} 

Выдача себя за другое лицо

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

Предоставление разрешения на обмен

Пользователь, которого представляет предметный токен, должен иметь разрешение олицетворять других пользователей.Увидеть {adminguide_name} о том, как включить это разрешение. Это можно сделать через роль или через мелкие разрешения администратора.

Запрос

Сделайте запрос, как описано в других главах, за исключением того, что дополнительно укажите параметр required_subject . В значением этого параметра должно быть имя пользователя или идентификатор пользователя.

 curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = секрет клиента" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "subject_token =.... "\
    --data-urlencode "required_token_type = urn: ietf: params: oauth: token-type: access_token" \
    -d "аудитория = целевой клиент" \
    -d "required_subject = wburke" \
    http: // локальный: 8080 / auth / realms / myrealm / протокол / openid-connect / токен 

Прямое голое олицетворение

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

Предупреждение

Допускать прямое голое олицетворение для клиента очень рискованно. Если учетные данные клиента когда-либо украденный, этот клиент может выдавать себя за любого пользователя в системе.
Предоставление разрешения на обмен

Если предоставлен параметр аудитория , то вызывающий клиент должен иметь разрешение на обмен с клиентом. Как об этом говорилось ранее в этой главе.

Кроме того, вызывающему клиенту должно быть предоставлено разрешение на олицетворение пользователей. В консоли администратора перейдите в Пользователи и щелкните вкладку Разрешения .

Разрешение пользователей

Установите переключатель Permissions Enabled в положение true.

Разрешение поставщика удостоверений

На странице вы должны увидеть ссылку , выдавая себя за . Щелкните это, чтобы начать определение разрешения. Это принесет вам на эту страницу.

Настройка разрешений на выдачу себя за другое лицо

Вам необходимо определить политику для этого разрешения. Щелкните ссылку Authorization , перейдите на вкладку Policies и создайте Политика клиента .

Создание клиентской политики

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

Применить политику клиента

Теперь ваш клиент может выдавать себя за пользователей. Если вы сделаете это неправильно, вы получите ответ 403 Forbidden, если вы попробуйте совершить такой обмен.

Примечание

Общедоступным клиентам не разрешается напрямую выдавать себя за другое лицо.
Запрос

Чтобы сделать запрос, просто укажите параметр required_subject . Это должно быть имя пользователя или идентификатор пользователя действующий пользователь. Вы также можете указать параметр аудитории , если хотите.

 curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = секрет клиента" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "required_subject = wburke" \
    http: // локальный: 8080 / auth / realms / myrealm / протокол / openid-connect / токен 

Расширьте модель разрешений с помощью учетных записей служб

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

Уязвимости на бирже

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

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

Можно обменять социальные токены, предоставленные Facebook, Google и т. Д., На токен области. Будьте осторожны и бдите за то, что обменный токен может делать это, так как создать фальшивые учетные записи на этих социальных сайтах несложно. Используйте роли, группы и средства сопоставления поставщиков удостоверений по умолчанию, чтобы контролировать, какие атрибуты и роли назначаются внешнему пользователю социальной сети.

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

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

OAuth 2.0. Спецификация определяет протокол… | by Nilasini Thirunavukkarasu

Спецификация определяет протокол для службы токенов безопасности (STS) на основе HTTP и JSON, определяя, как запрашивать и получать токены безопасности с серверов авторизации OAuth 2.0, включая токены безопасности, использующие олицетворение и делегирование.

Когда принципал A олицетворяет принципала B, A получает все права
, которые B имеет в пределах некоторого определенного контекста прав, и
неотличим от B в этом контексте. Таким образом, когда принципал A
олицетворяет принципала B, то, поскольку это касается любого объекта, получающего такой токен
, они фактически имеют дело с B. Это правда
, что некоторые члены системы идентификации могут осознавать, что
олицетворение происходит, но это не требование. Для всех
намерений и целей, когда A выдает себя за B, A является B.

В следующем запросе обмена токенами клиент запрашивает токен
с семантикой олицетворения. Клиент сообщает серверу авторизации, что ему нужен токен для использования в целевой службе с логическим именем «urn: example: кооперация-контекст». Здесь предметный токен — это исходный токен, а тип токена — это тип этого токена (в данном случае jwt).

 POST /as/token.oauth3 HTTP / 1.1 
Хост: as.example.com
Content-Type: application / x-www-form-urlencoded
grant_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Agrant-type % 3Atoken-exchange
и аудитория = urn% 3Aexample% 3Acooperation-context
& subject_token = eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwc
zovL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXI

uZXhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTA2MDAsIm5iZiI6MTQ0MTkwOTAwMCwic 3ViIjoiYmNAZXhhbXBsZS5uZXQiLCJzY3AiOlsib3JkZXJzIiwicHJvZmlsZSIsImh

pc3RvcnkiXX0.JDe7fZ267iIRXwbFmOugyCt5dmGoy6EeuzNQ3MqDek5cCUlyPhQC6 cz9laKjK1bnjMQbLJqWix6ZdBI0isjsTA
& subject_token_type = урна% 3Aietf% 3Aparams% 3Aoauth% 3Atoken типа% 3Ajwt

91 332 Тема Маркер Требования

«subject_token» в предварительной заявке является JWT, и здесь показан декодированный набор утверждений JWT
.JWT предназначен для использования сервером авторизации в течение определенного временного окна. Субъект JWT («[email protected]») — это сторона, от имени которой запрашивается новый токен.

 {
«aud»: «https://as.example.com»,
«iss»: «https://original-issuer.example.net»,
«exp»: 1441
    0,
    «nbf» : 14410,
    «sub»: «[email protected]»,
    «scp»: [«заказы», ​​«профиль», «история»]
    }

Параметр «access_token» в ответе на обмен токенами Показанный содержит новый токен, запрошенный клиентом.Другие параметры
ответа указывают, что токен является носителем доступа
, токен истекает через час.

Декодированный набор заявлений JWT выданного токена показан ниже. Новый JWT
выдается сервером авторизации и предназначен для использования
системным объектом, известным под логическим именем
«urn: example: кооперация-контекст», в любое время до истечения срока его действия.
Субъект («под») JWT совпадает с субъектом токена
, использованного для выполнения запроса, что фактически позволяет клиенту
олицетворять этот субъект в системном объекте, известном логическим
именем “urn: пример: контекст-сотрудничество »с помощью токена.

 {
"aud": "urn: example: кооперация-контекст",
"iss": "https://as.example.com",
"exp": 14410,
"sub": "bc @ example.net »,
« scp »: [« заказы »,« история »,« профиль »]
}

Ресурсы и аудитория

При запросе токена клиент может указать желаемую целевую службу (службы)
, где он намеревается использовать этот маркер посредством параметров
«аудитория» и «ресурс», ресурс указывает физическое местоположение целевой службы или ресурса, где клиент намеревается использовать запрошенный маркер безопасности. Аудитория указывает логическое имя целевой службы, где клиент намеревается использовать запрошенный маркер безопасности.

Семантика делегирования отличается от семантики олицетворения,
хотя они тесно связаны. С семантикой делегирования
принципал A по-прежнему имеет свой собственный идентификатор, отдельный от B, и
явно понимает, что, хотя B мог делегировать некоторые из своих прав A, любые действия предпринимаются A, представляющим B.
В некотором смысле A является агентом для B.

В следующем запросе обмена маркерами клиент запрашивает маркер
и предоставляет как «subject_token», так и «actor_token ». Клиент сообщает серверу авторизации, что ему нужен токен для использования в целевой службе с логическим именем «urn: example: кооперация-контекст». Политика на сервере авторизации требует, чтобы выданный токен был составным.

 POST /as/token.oauth3 HTTP / 1.1 
Хост: as.example.com
Content-Type: application / x-www-form-urlencoded
grant_type = urn% 3Aietf% 3Aparams% 3Aoauth% 3Agrant-type % 3Atoken-exchange и аудитория = urn% 3Aexample% 3Acooperation-context
& subject_token = eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwc

zovL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXI uZXhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTAwNjAsInNjcCI6WyJzdGF0dXMiLCJmZ WVkIl0sInN1YiI6InVzZXJAZXhhbXBsZS5uZXQiLCJtYXlfYWN0Ijp7InN1YiI6ImF

kbWluQGV4YW1wbGUubmV0In19.ut0Ll7wm920VzRvuLGLFoPJLeO5DDElxsax1L_xK Um2eooiNSfuif-OGa2382hPyFYnddKIa0wmDhQksW018Rw & subject_token_type = урна% 3Aietf% 3Aparams% 3Aoauth% 3Atoken типа% 3Ajwt & actor_token = eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwczo
vL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXIuZ XhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTAwNjAsInN1YiI6ImFkbWluQGV4YW1wbGU
ubmV0In0.7YQ-3zPfhUvzje5oqw8COCvN5uP6NsKik9CVV6cAOf4QKgM-tKfiOwcgZ
oUuDL2tEs6tqPlcBlMjiSzEjm3yBg & actor_token_type = урна% 3Aietf% 3Aparams% 3Aoauth% 3Atoken типа% 3Ajwt
91 298 Тема Маркер Требования +

«subject_token» в предварительной заявке является JWT, и декодированный JWT
претензий Набор является показано здесь. JWT предназначен для использования сервером авторизации
до истечения определенного времени. Субъект
JWT («[email protected]») — это сторона, от имени которой запрашивается новый токен
.

 {
«aud»: «https://as.example.com»,
«iss»: «https://original-issuer.example.net»,
«exp»: 14410,
«scp» : ["status", "feed"],
"sub": "[email protected]",
"may_act":
{
"sub": "[email protected]"
}
}

Заявление «may_act» (может действовать от имени)

Заявление «may_act» утверждает, что одна сторона уполномочена
стать действующим лицом и действовать от имени другой стороны.

Заявки на жетон актора

«Актер_токен» в предыдущем запросе — это JWT, и здесь показан декодированный набор заявлений JWT
.Этот JWT также предназначен для использования
сервером авторизации до определенного времени истечения срока действия. Субъект
JWT («[email protected]») — это субъект, который будет владеть
запрошенным токеном безопасности. «токен-актера» — необязательный параметр.

 {
"aud": "https://as.example.com",
"iss": "https://original-issuer.example.net",
"exp": 14410,
"sub ":" [email protected] "
}

Параметр» access_token «в ответе на обмен токенами, показанный
, содержит новый токен, запрошенный клиентом.Другие параметры
ответа указывают, что токен является JWT, срок действия которого
истекает через час, и что тип токена доступа
неприменим, поскольку выданный токен не является токеном доступа.

Декодированный набор заявлений JWT выданного токена показан ниже. Новый JWT
выдается сервером авторизации и предназначен для использования
системным объектом, известным под логическим именем «urn: example: кооперация-контекст», в любое время до истечения срока его действия.
Тема («sub») JWT такая же, как тема
«subject_token», используемого для выполнения запроса.Актер («действие»)
JWT совпадает с субъектом «токена-исполнителя», использованного для выполнения запроса
. Это указывает на делегирование и определяет
«[email protected]» как текущего субъекта, которому
делегированы полномочия действовать от имени «[email protected]».

 {
"aud": "urn: example: кооперация-контекст",
"iss": "https://as.example.com",
"exp": 14410,
"scp": ["status "," feed "],
" sub ":" [email protected] ",
" act ":
{
" sub ":" admin @ example.net "
}
}

Сводка token_exchange
  1. Первоначально клиентское приложение ( alice ) отправляет токен jwt в API1. Здесь токен jwt имеет целевую аудиторию как api1, поэтому API1 принимает jwt, но API1 хотел получить доступ к API2 для выполнения некоторой задачи для Алисы. Но API2 позволит только Алисе или кому-либо другому действовать как Алиса.
  2. Итак, теперь API1 хотел токен от имени алисы , который позволит получить доступ к API2. Следовательно, API1 отправит полученный jwt токен для STS и попросил STS: «Смотрите, у меня есть токен jwt (subject_token = xyz), который предназначен для моей аудитории, но теперь я хотел получить доступ к API2 (scope = api2), поэтому, пожалуйста, дайте мне токен, который я мог бы использовать от имени Алисы для доступа к API2 ».
  3. Как только API1 получит токен от STS, API1 отправит токен в API2. Поскольку токен говорит, что API1 является действующим лицом от имени Алисы, API2 примет токен с помощью сервера авторизации.

Приведенный выше пример сценария представляет сценарий делегирования токена .

Для получения дополнительной информации об обмене токенов см. [1]

[1] https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-10

Глава 7. Обмен токенов Red Hat Единый вход 7.4

Token Exchange — это Technology Preview , которая не полностью поддерживается. По умолчанию эта функция отключена.

Чтобы разрешить запуск сервера с -Dkeycloak.profile = preview или -Dkeycloak.profile.feature.token_exchange = enabled . Подробнее см. Профили.

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

В Red Hat Single Sign-On обмен токенами — это процесс использования набора учетных данных или токена для получения совершенно другого токена.Клиент может захотеть вызвать менее надежное приложение, поэтому он может захотеть понизить версию текущего токена, который у него есть. Клиент может захотеть обменять токен единого входа Red Hat на токен, хранящийся для связанной учетной записи социального провайдера. Вы можете доверять внешним токенам, созданным другими сферами единого входа Red Hat или иностранными IDP. У клиента может возникнуть необходимость выдать себя за пользователя. Вот краткое описание текущих возможностей Red Hat Single Sign-On для обмена токенами.

  • Клиент может обменять существующий токен единого входа Red Hat, созданный для конкретного клиента, на новый токен, предназначенный для другого клиента.
  • Клиент может обменять существующий токен единого входа Red Hat на внешний токен, т.е.е. связанная учетная запись Facebook
  • Клиент может обменять внешний токен на токен единого входа Red Hat.
  • Клиент может выдавать себя за пользователя

Обмен токенами в Red Hat Single Sign-On — это очень свободная реализация спецификации OAuth Token Exchange в IETF. Мы немного расширили его, проигнорировали некоторые из них и вольно интерпретировали другие части спецификации. Это простой вызов типа предоставления в конечной точке токена OpenID Connect области.

 / auth / realms / {realm} / protocol / openid-connect / token 

Он принимает параметры формы ( application / x-www-form-urlencoded ) в качестве входных данных, а выходные данные зависят от типа токена, на который вы запросили обмен. Обмен токенами — это конечная точка клиента, поэтому запросы должны предоставлять информацию аутентификации для вызывающего клиента. Общедоступные клиенты указывают свой идентификатор клиента в качестве параметра формы. Конфиденциальные клиенты также могут использовать параметры формы для передачи своего идентификатора и секрета клиента, базовой аутентификации или, как бы то ни было, ваш администратор настроил поток аутентификации клиента в вашей области.Вот список параметров формы

client_id
ТРЕБУЕТСЯ МОЖЕТ БЫТЬ. Этот параметр необходим для клиентов, использующих параметры формы для аутентификации. Если вы используете обычную проверку подлинности, клиентский токен JWT или проверку подлинности сертификата клиента, не указывайте этот параметр.
client_secret
ТРЕБУЕТСЯ МОЖЕТ БЫТЬ . Этот параметр необходим для клиентов, использующих параметры формы для аутентификации и использующих секрет клиента в качестве учетных данных.Не указывайте этот параметр, если вызовы клиентов в вашей области аутентифицируются другими способами.
grant_type
ТРЕБУЕТСЯ. Значение параметра должно быть urn: ietf: params: oauth: grant-type: token-exchange .
subject_token
ДОПОЛНИТЕЛЬНО. Маркер безопасности, представляющий личность стороны, от имени которой делается запрос. Это необходимо, если вы обмениваете существующий токен на новый.
subject_issuer
ДОПОЛНИТЕЛЬНО. Идентифицирует эмитента subject_token . Его можно оставить пустым, если токен поступает из текущей области или если эмитент может быть определен из subject_token_type . В противном случае необходимо указать. Допустимые значения — это псевдоним Identity Provider , настроенный для вашей области. Или идентификатор утверждения эмитента, настроенный конкретным поставщиком удостоверений .
subject_token_type
ДОПОЛНИТЕЛЬНО. Этот параметр представляет собой тип токена, переданного с параметром subject_token . По умолчанию это urn: ietf: params: oauth: token-type: access_token , если subject_token поступает из области и является токеном доступа. Если это внешний токен, этот параметр может указывать или не указывать в зависимости от требований subject_issuer .
required_token_type
ДОПОЛНИТЕЛЬНО. Этот параметр представляет тип токена, на который клиент хочет обменяться.В настоящее время поддерживаются только типы токенов oauth и OpenID Connect. Значение по умолчанию для этого зависит от того, является ли это urn: ietf: params: oauth: token-type: refresh_token , и в этом случае вам будут возвращены как токен доступа, так и токен обновления в ответе. Другие подходящие значения: urn: ietf: params: oauth: token-type: access_token и urn: ietf: params: oauth: token-type: id_token
аудитория
ДОПОЛНИТЕЛЬНО. Этот параметр указывает целевого клиента, для которого вы хотите создать новый токен.
required_issuer
ДОПОЛНИТЕЛЬНО. Этот параметр указывает, что клиент хочет, чтобы токен был создан внешним поставщиком. Это должен быть псевдоним провайдера идентификации , настроенного в области.
required_subject
ДОПОЛНИТЕЛЬНО. Указывает имя пользователя или идентификатор пользователя, если ваш клиент хочет выдать себя за другого пользователя.
объем
НЕ ВЫПОЛНЯЕТСЯ. Этот параметр представляет целевой набор областей OAuth и OpenID Connect, запрашиваемых клиентом.В настоящее время он не реализован, но будет реализован после того, как Red Hat Single Sign-On будет лучше поддерживать области в целом.

В настоящее время мы поддерживаем только обмены OpenID Connect и OAuth. Поддержка клиентов на основе SAML и поставщиков удостоверений может быть добавлена ​​в будущем в зависимости от потребностей пользователей.

Успешный ответ от вызова обмена вернет код ответа HTTP 200 с типом содержимого, который зависит от типа запрошенного маркера и запрошенного_иссера , запрашиваемого клиентом.Типы токенов, запрошенных OAuth, будут возвращать документ JSON, как описано в спецификации обмена токенами OAuth.

 {
   "access_token": ".....",
   "refresh_token": ".....",
   "истекает" : "...."
 } 

Клиенты, запрашивающие токен обновления, получат в ответ как токен доступа, так и токен обновления. Клиенты, запрашивающие только тип токена доступа, получат в ответ только токен доступа. Информация об истечении срока может быть включена или не включена для клиентов, запрашивающих внешний эмитент через параметр requested_issuer .

Ответы об ошибках обычно подпадают под категорию кода ответа HTTP 400, но могут быть возвращены другие коды состояния ошибки в зависимости от серьезности ошибки. Ответы об ошибках могут включать содержимое в зависимости от required_issuer . Обмены на основе OAuth могут возвращать документ JSON следующим образом:

 {
   "ошибка" : "...."
   "error_description": "...."
} 

Дополнительные претензии об ошибках могут быть возвращены в зависимости от типа обмена. Например, поставщики удостоверений OAuth могут включать дополнительное утверждение account-link-url , если у пользователя нет ссылки на поставщика удостоверений.Эта ссылка может использоваться для запроса связи, инициированного клиентом.

Для настройки обмена токенами требуется знание мелких прав администратора (дополнительную информацию см. В Руководстве по администрированию сервера). Вам нужно будет предоставить клиентам разрешение на обмен. Это обсуждается более подробно позже в этой главе.

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

7.1. Внутренний токен для внутреннего обмена токенов

При внутреннем обмене токена на токен у вас есть существующий токен, отчеканенный для определенного клиента, и вы хотите обменять этот токен на новый, отчеканенный для другого целевого клиента. Зачем тебе это нужно? Обычно это происходит, когда у клиента есть токен, созданный для себя, и ему необходимо делать дополнительные запросы к другим приложениям, которые требуют других утверждений и разрешений в токене доступа.Другими причинами, по которым может потребоваться этот тип обмена, является то, что вам нужно выполнить «понижение уровня разрешений», когда ваше приложение должно запускаться в менее надежном приложении, а вы не хотите распространять свой текущий токен доступа.

7.1.1. Предоставление разрешения на обмен

Клиенты, которые хотят обменять токены на другого клиента, должны быть авторизованы в консоли администратора для этого. Вам нужно будет определить мелкое разрешение token-exchange для целевого клиента, которому вы хотите разрешить обмен.

Разрешение целевого клиента

Установите переключатель Permissions Enabled в положение ON.

Разрешение целевого клиента

На странице вы должны увидеть ссылку token-exchange . Щелкните это, чтобы начать определение разрешения. Вы попадете на эту страницу.

Настройка разрешений Exchange для целевого клиента

Вам нужно будет определить политику для этого разрешения.Щелкните ссылку Authorization , перейдите на вкладку Policies и создайте политику Client .

Создание клиентской политики

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

Применить политику клиента

Теперь у вашего клиента есть разрешение на вызов.Если вы не сделаете это правильно, вы получите ответ 403 Forbidden, если попытаетесь совершить обмен.

7.1.2. Оформление запроса

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

 curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = geheim" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "subject_token =.... "\
    --data-urlencode "required_token_type = urn: ietf: params: oauth: token-type: refresh_token" \
    -d "аудитория = целевой клиент" \
    http: // локальный: 8080 / auth / области / myrealm / протокол / openid-connect / токен 

Параметр subject_token должен быть токеном доступа для целевой области. Если ваш параметр requested_token_type является типом токена обновления, то ответ будет содержать как токен доступа, так и токен обновления и срок действия. Вот пример ответа JSON, полученного вами после этого вызова.

 {
   "access_token": "....",
   "refresh_token": "....",
   "expires_in": 3600
} 

7.2. Внутренний токен для обмена внешними токенами

Вы можете обменять токен области на внешний токен, созданный внешним поставщиком удостоверений. Этот внешний поставщик удостоверений должен быть настроен в разделе Identity Provider консоли администратора. В настоящее время поддерживаются только внешние поставщики удостоверений на основе OAuth / OpenID Connect, включая всех поставщиков социальных сетей.Red Hat Single Sign-On не выполняет обратный обмен с внешним провайдером. Поэтому, если учетная запись не привязана, вы не сможете получить внешний токен. Чтобы получить внешний токен, должно быть выполнено одно из следующих условий:

  • Пользователь должен хотя бы один раз войти в систему с помощью внешнего поставщика удостоверений.
  • Пользователь должен быть связан с внешним поставщиком удостоверений через Службу учетных записей пользователей.
  • Учетная запись пользователя была связана через внешнего поставщика удостоверений с использованием API связывания учетной записи, инициированной клиентом.

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

Если учетная запись не привязана, ответ обмена будет содержать ссылку, которую вы можете использовать для ее установки. Подробнее об этом говорится в разделе «Создание запроса».

7.2.1. Предоставление разрешения на обмен

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

Разрешение поставщика удостоверений

Установите переключатель Permissions Enabled в положение true.

Разрешение поставщика удостоверений

На странице вы должны увидеть ссылку token-exchange . Щелкните это, чтобы начать определение разрешения.Вы попадете на эту страницу.

Настройка разрешений для обмена с поставщиком удостоверений

Вам нужно будет определить политику для этого разрешения. Щелкните ссылку Authorization , перейдите на вкладку Policies и создайте политику Client .

Создание клиентской политики

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

Применить политику клиента

Теперь у вашего клиента есть разрешение на вызов. Если вы не сделаете это правильно, вы получите ответ 403 Forbidden, если попытаетесь совершить обмен.

7.2.2. Оформление запроса

Когда ваш клиент обменивает существующий внутренний токен на внешний, вы должны указать параметр requested_issuer .Параметр должен быть псевдонимом настроенного поставщика удостоверений.

 curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = geheim" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "subject_token = ...." \
    --data-urlencode "required_token_type = urn: ietf: params: oauth: token-type: access_token" \
    -d "required_issuer = google" \
    http: // локальный: 8080 / auth / области / myrealm / протокол / openid-connect / токен 

Параметр subject_token должен быть токеном доступа для целевой области.Параметр required_token_type должен иметь значение urn: ietf: params: oauth: token-type: access_token или оставить пустым. Никакой другой запрошенный тип токена в настоящее время не поддерживается. Вот пример успешного ответа JSON, полученного вами после этого вызова.

 {
   "access_token": "....",
   "expires_in": 3600
   "URL-адрес-ссылки": "https: // ...."
} 

Если внешний поставщик удостоверений не связан по какой-либо причине, вы получите код ответа HTTP 400 с этим документом JSON:

 {
   "ошибка" : ".... ",
   "error_description": "..."
   "URL-адрес-ссылки": "https: // ...."
} 

Утверждение error будет либо token_expired , либо not_linked . Утверждение account-link-url предоставляется для того, чтобы клиент мог выполнить привязку учетной записи, инициированную клиентом. Большинство (всех?) Провайдеров требуют подключения через протокол OAuth браузера. С account-link-url просто добавьте к нему параметр запроса redirect_uri , и вы можете перенаправить браузеры для выполнения ссылки.

7.3. Внешний токен для внутреннего обмена токенами

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

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

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

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

Поставщики удостоверений SAML в настоящее время не поддерживаются.Токены Twitter также не подлежат обмену.

7.3.1. Предоставление разрешения на обмен

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

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

7.3.2. Оформление запроса

subject_token_type должен быть либо urn: ietf: params: oauth: token-type: access_token , либо urn: ietf: params: oauth: token-type: jwt . Если типом является urn: ietf: params: oauth: token-type: access_token , необходимо указать параметр subject_issuer , который должен быть псевдонимом настроенного поставщика удостоверений. Если типом является urn: ietf: params: oauth: token-type: jwt , поставщик будет сопоставлен через утверждение эмитента в JWT, которое должно быть псевдонимом поставщика или зарегистрированным эмитентом в поставщиках. конфигурация.

Для проверки, если токен является токеном доступа, для проверки токена будет вызвана служба информации о пользователе поставщика. Успешный вызов будет означать, что токен доступа действителен. Если предметный токен является JWT, и если у поставщика включена проверка подписи, это будет предпринято, в противном случае он по умолчанию также будет вызывать информационную службу пользователя для проверки токена.

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

 curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = geheim" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "subject_token = ...." \
    -d "subject_issuer = myOidcProvider" \
    --data-urlencode "subject_token_type = urn: ietf: params: oauth: token-type: access_token" \
    -d "аудитория = целевой клиент" \
    http: // локальный: 8080 / auth / области / myrealm / протокол / openid-connect / токен 

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

 {
   "access_token": "....",
   "refresh_token": "....",
   "expires_in": 3600
} 

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

7.4.1. Предоставление разрешения на обмен

Пользователь, которого представляет предметный токен, должен иметь разрешение олицетворять других пользователей.См. Руководство по администрированию сервера, чтобы узнать, как включить это разрешение. Это можно сделать через роль или через мелкие разрешения администратора.

7.4.2. Оформление запроса

Сделайте запрос, как описано в других главах, за исключением того, что дополнительно укажите параметр requested_subject . Значением этого параметра должно быть имя пользователя или идентификатор пользователя.

 curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = geheim" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "subject_token =.... "\
    --data-urlencode "required_token_type = urn: ietf: params: oauth: token-type: access_token" \
    -d "аудитория = целевой клиент" \
    -d "required_subject = wburke" \
    http: // localhost: 8080 / auth / realms / myrealm / protocol / openid-connect / token 

7.5. Прямое голое олицетворение

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

Допускать прямое голое олицетворение для клиента очень рискованно. Если учетные данные клиента когда-либо будут украдены, этот клиент может выдать себя за любого пользователя в системе.

7.5.1. Предоставление разрешения на обмен

Если предоставлен параметр аудитория , то вызывающий клиент должен иметь разрешение на обмен с клиентом. Как это настроить, обсуждалось ранее в этой главе.

Кроме того, вызывающему клиенту должно быть предоставлено разрешение на олицетворение пользователей. В консоли администратора перейдите на экран Пользователи и щелкните вкладку Разрешения .

Разрешение пользователей

Установите переключатель Permissions Enabled в положение true.

Разрешение поставщика удостоверений

На странице вы должны увидеть ссылку , выдавая себя за . Щелкните это, чтобы начать определение разрешения. Вы попадете на эту страницу.

Настройка разрешений на выдачу себя за другое лицо

Вам нужно будет определить политику для этого разрешения. Щелкните ссылку Authorization , перейдите на вкладку Policies и создайте политику Client .

Создание клиентской политики

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

Применить политику клиента

Теперь у вашего клиента есть разрешение выдавать себя за пользователей. Если вы не сделаете это правильно, вы получите ответ 403 Forbidden, если попытаетесь совершить этот тип обмена.

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

7.5.2. Оформление запроса

Чтобы сделать запрос, просто укажите параметр required_subject . Это должно быть имя пользователя или идентификатор действующего пользователя. Вы также можете указать параметр аудитории , если хотите.

 curl -X POST \
    -d "client_id = start-client" \
    -d "client_secret = geheim" \
    --data-urlencode "grant_type = urn: ietf: params: oauth: grant-type: token-exchange" \
    -d "required_subject = wburke" \
    http: // localhost: 8080 / auth / realms / myrealm / protocol / openid-connect / token 

7.6. Расширьте модель разрешений с помощью учетных записей служб

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

7.7. Уязвимости на бирже

Когда вы начинаете разрешать обмен токенов, вам нужно помнить о различных вещах, о которых нужно помнить.

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

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

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

Обмен токенов — Tapkey для разработчиков

Раздел 4.5 RFC 6749 позволяет серверу авторизации определять дополнительные настраиваемые типы грантов. Тип предоставления Token Exchange — это поток, зависящий от Tapkey, который позволяет сторонним приложениям обмениваться токенами от внешних поставщиков удостоверений на токен доступа, который можно использовать для доступа к серверу ресурсов.

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

Поток обмена токенами

  1. Аутентификация : Аутентификация пользователей не является частью этого потока
  2. Авторизация : Клиент обменивает внешний токен пользователя на токен доступа
  3. Доступ к защищенным ресурсам : Доступ клиента сервер ресурсов (например, Management API, Mobile SDK) с маркером доступа пользователя

Аутентификация

Аутентификация не является частью типа предоставления Token Exchange.Вместо этого клиенты должны будут позаботиться об аутентификации пользователей с помощью внешнего поставщика удостоверений, который был предварительно зарегистрирован с помощью Tapkey и может выдавать токены (называемые в этом документе внешним токеном), которые можно обменять на токен доступа.

Авторизация

Internet-Draft for OAuth 2.0 Token Exchange

Авторизация аналогична предложению в проекте OAuth 2.0 Token Exchange, раздел 2.

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

  ЗАПИСЬ https://login.tapkey.com/connect/token
  
со следующими параметрами с использованием формата application / x-www-form-urlencoded с кодировкой символов UTF-8 в теле запроса:
Имя Описание
client_id Обязательно. Идентификатор клиента, выданный в процессе клиентского приложения Tapkey OAuth.
grant_type Обязательно. Должен быть http://tapkey.net/oauth/token_exchange .
провайдер Обязательно. Идентификатор поставщика удостоверений, присвоенный во время регистрации поставщика удостоверений.
объем Обязательно. Список областей, разделенных пробелами. Доступные объемы можно найти здесь.
subject_token_type Обязательно. Тип внешнего токена.Должен быть jwt .
subject_token Обязательно. Внешний токен для обмена на токен доступа.
аудитория Дополнительно. Запрошена аудитория токена. Если присутствует, должно быть tapkey_api .
required_token_type Необязательно. Может использоваться для указания типа запрошенного токена.Если присутствует, должно быть access_token .

В следующем фрагменте показан пример ответа на запрос токена с использованием типа предоставления Token Exchange:

  {
  "access_token": "eyJhbGciOiJSUz ... O-YbBq8F7086rQi-kEbERp4dA3r0WonpHnmYcXEnA",
  "expires_in": 3600,
  "token_type": "На предъявителя"
}
  
Обновление токена доступа

Сервер авторизации никогда не будет выдавать токен обновления для типа предоставления Token Exchange. Когда токен доступа, выданный через тип предоставления Token Exchange, достигает конца своего срока службы, клиент должен выполнить новый запрос токена, чтобы получить новый токен доступа.Время жизни токена доступа будет соответствовать времени жизни, запрошенному во внешнем токене.

Доступ к защищенным ресурсам

Полученный токен доступа можно использовать для доступа к серверу ресурсов (например, для вызова Management API или аутентификации пользователей в Tapkey Mobile SDK).

Подсказка

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

Management API

Следующий фрагмент демонстрирует примерный вызов Management API с запросом дополнительной информации о пользователе.

RFC 6750

Метод авторизации, используемый в этом примере, указан в разделе 2.1 RFC 6750.

  GET https://my.tapkey.com/api/v1/auth/auth/userinfo

Авторизация: предъявитель eyJhbGciOiJSUz ... O-YbBq8F7086rQi-kEbERp4dA3r0WonpHnmYcXEnA
  
Mobile SDK

Следующий фрагмент демонстрирует, как войти в систему пользователя в Tapkey Mobile SDK, используя токен доступа, полученный через поток Token Exchange.

Обновлено: 09.06.2021 — 13:40

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *