LINUX.ORG.RU

Интеграция с использованием OAuth2

 


0

1

Всем привет.

Подскажите, плиз, правильный сценарий интеграции с использованием OAuth2.

Исходные данные: у нас есть resource owner и OAuth2 сервер.
Требуется: стороння система хочет периодически обращаться к нашим ресурсам. Стороння система - для простоты предположим, что это система мониторинга, работающая 24 часа в сутки, и не всегда за экраном сидит оператор.

Как я понял, мы в любом случае мы предоставляем ClientId и Client Secret, и сторонняя система хранит это где-то в своих конфигах.

Что до access_token, вижу 3 возможных сценария.

Сценарий 1. Сторонняя система хранит user/password и заказывает себе access_token
Как я понял, сценарий неправильный, так как user/password нужно пользоваться пореже, и в идеале вообще не хранить в системе, а запрашивать у пользователя.

Сценарий 2. Сторонняя система просит пользователя ввести user/password, заказывает себе access_token, обновляет его с помощью refresh_token
Сценарий видится правильным, но concern'ы следующие:
а) refresh_token тоже имеет expiration time, а значит через некоторое время система опять должна запросить user/password, что будет весьма некстати для системы мониторинга в 2 часа ночи, когда никого не будет около системы.
б) refresh_token не меняется при операции refresh (это by design, да?), а делать его вечно живущим тоже видится не совсем правильным с точки зрения security.

Сценарий 3. Сторонняя система получает (кроме ClientId и Client Secret) только refresh_token
Плюсы состоят в том, что теперь не нужно каждой сторонней системе запрашивать логины/пароли, это будет делаться как-то централизованно. Но получается теперь нудна еще одна система, которая будет менеджить все создания refresh token'ов и каким-то образом будет распростанять их по сторонним системам (да, их несколько)?

Так какой сценарий более правильный, и какая система должна запрашивать user/password для создания/обновления token'ов?

★★★★★
Ответ на: комментарий от vombat

Зачем нужен access_token и refresh_token я знаю.

Здесь суть вопроса другая.

Как я понял, OAuth преполагает, что есть софт (клиент) и есть юзер (resource owner). И что на клиенте могут работать несколько юзеров. И что юзер - человек, который вводит пароль. Права доступа назначаются именно юзеру.

А теперь возьмем M2M: там девайс и юзер - одно и то же. И делать две пары ClientID+ClientSecret и User/Password - это излишне.

Вот я и спрашиваю: есть ли сценарий для OAuth2, когда юзера де-факто нет. А если такого варианта нет, и всё равно нужно две пары name/secret, то как это правильно реализовать.

Kroz ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.