Django-OAuth-ToolKit: создание маркеров доступа для нескольких ресурсов / сервисов с использованием типа предоставления учетных данных клиента OAuth2.0 - PullRequest
1 голос
/ 26 марта 2019

У меня есть пара бэкэнд API, которые являются проектами Django.У них есть пользовательский интерфейс (одностраничное приложение) и логин, основанный на пароле имени пользователя.

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

Вопросы

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

Для эксперимента я запустил отдельный oauth-сервер, локально работающий на порту 8000, запустил сервер ресурсов (r1) на 8001 и сервер ресурсов (r2) на 8002.

шаг1:

Я зашел в админ-панель oauth-сервера, создал пользователя u1 для ресурса r1 и пользователя u2 для ресурса r2.Я зашел в модуль приложений в админ-панели, зарегистрировал r1 и r2 в приложениях с паролем владельца ресурса типа предоставления.Чтобы сгенерировать токен доступа, я позвонил в конечную точку токена

POST -d "grant_type=password&username=u1&password=u1password" -u "clientid of R1:clientsecre of fR1" http://localhost:8000/o/token/

Я получил токен доступа

{"access_token": "KdAOMZBiMomVxpvjAWErwVGog6NRRH", "expires_in": 86400, "token_type": "Bearer", "scope": "read write introspection", "refresh_token": "ffgkZZ5NtVFh4REs0TbFAALNkJqXVQ"}

шаг 2:

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

OAUTH2_PROVIDER = {

'RESOURCE_SERVER_INTROSPECTION_URL': 'http://localhost:8000/o/introspect/',
'RESOURCE_SERVER_AUTH_TOKEN': '9b2uVud7WXHEdyolznvvkM3KwWfkVe',  # OR this but not both:
#'RESOURCE_SERVER_INTROSPECTION_CREDENTIALS': ('5sRVXLoTQj9vlkLWaziIMZrgra1keupWIQ2On2hX','5jwMxls1JiAiQiNVnRTtbjmzgRO20FEHD0BBdiSAwvSL1XswZKqglDRke2L8Ig77ol7OE3ZdsA9SE7sry0u3BXwd1OvfFfhDVJFSLWlPG6g1vB3w4ZFc1g8ZwgzXJooc'),

}

шаг 3: я проделал тот же процесс и для сервера ресурсов R2.

Вопрос 2: Правильно ли этот процесс регистрации сервера с несколькими ресурсами?Правильно ли я настроил интроспекцию?

Вопрос 3: Как мне зарегистрировать разные микроуслуги, работающие на одном и том же сервере ресурсов?

Шаг 4: Предполагая, что теперь у меня есть сервер аутентификации, готовый кгенерировать токен для ресурсов r1 и r2.

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

Вот так теперь выглядит моя панель администратора с R1 с пользователем U1 и R2 с U2, зарегистрированным как сервер ресурсов и приложение для разработчиков, не связанное с каким-либо пользователем, являющимся клиентом, который хочет получить доступ к любомуиз этих ресурсов.

enter image description here

шаг 5: Имитируя, как разработчик сгенерировал бы токен доступа, я сгенерировал токен доступа, подобный этому enter image description here

Примечание. Я использовал идентификатор клиента и секрет клиента Resource R1 и сгенерировал токен доступа, но я могу успешно использовать один и тот же токен доступа даже для Resource R2 и его работы.

Вопрос 3: Почему маркер доступа, сгенерированный мной с использованием идентификатора клиента R1 и секрета клиента, работает даже для R2.Я что-то здесь не так делаю?По сути, я хочу иметь возможность создавать токены доступа для разработчика специально для ресурса.Я знаю, что есть область действия и разрешения, но могу ли я сгенерировать токен доступа только для определенного ресурса?Что мне нужно сделать, чтобы добиться этого, мне нужно расширить или добавить некоторую логику?

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

Спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

вопрос 1. Я планирую использовать django-oauth-tool kit, похоже мне, что тип предоставления учетных данных клиента будет подходящим для этого вариант использования. Я прав?

Да, вы правы.

Вопрос 2: это процесс регистрации нескольких серверов ресурсов правильный ? Правильно ли я настроил самоанализ?

Да, вы делаете это правильно.

Вопрос 3: Как мне зарегистрировать разные микро сервисы, работающие на тот же ресурсный сервер?

Вы имеете в виду запуск различных микро-сервисов на разных портах на одном и том же сервере ресурсов? Если да, то вы должны настроить свой сервер ресурсов так же, как вы делали это для R1 и R2.

Вопрос 3: Почему токен доступа, который я сгенерировал, используя идентификатор клиента R1 и секрет клиента работает даже на R2. Я делаю что-то не так здесь? ? По сути, я хочу иметь возможность создавать токены доступа для разработчик специально для ресурса. Я знаю, что есть сфера и разрешения, но я могу сгенерировать токен доступа для определенного ресурса только ? Что мне нужно сделать, чтобы достичь этого, мне нужно расширить или добавить какая-то логика?

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

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

  1. Да, использование client_credentials является правильным способом решения вашей проблемы.
  2. Да, вы настраиваете это правильно. Тем не менее, посмотрите на JWT для альтернативного и продвинутого подхода. Использование JWT позволяет избежать интроспективного вызова на OAuth Server, тем самым сохраняя сетевой вызов.
0 голосов
/ 26 марта 2019

Чтобы просто защитить бэкэнд, вы можете использовать встроенную Token Authentication .

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

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

...