Распространение токена JWT между сервисами - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу распространить токен JWT между моими службами, работающими в docker, используя библиотеку flask-jwt-extended, и у меня есть представление о том, как мне это сделать, используя нечто похожее на это:

request.post(url, json={"access_token": access_token, "refresh_token": refresh_token)

Но по моему опыту мне нужно вернуть ответ, чтобы сделать это.

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

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

Я отправлю запрос на публикацию функции, которая будет выглядеть примерно так:

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == "POST":
        resp = jsonify({'login': True})
        set_access_cookies(resp, request.json["access_token"])
        set_refresh_cookies(resp, request.json["refresh_token"])
        return resp, 200

Нужно ли мне возвращать этот ответ?

1 Ответ

0 голосов
/ 12 февраля 2019

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

Вот основные сведения:

  1. Токен запросов внешнего интерфейса от бэкэнда через авторизацию api

  2. Бэкэнд проверяет учетные данные, выдает токен с использованием алгоритма «RSXXX», например.'RS512'

  3. Интерфейс передает токен на все вызовы любой из ваших внутренних служб.

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

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

В этой статье содержится некоторая полезная информация об использовании пары открытый / закрытый ключ с pyjwt: https://blog.miguelgrinberg.com/post/json-web-tokens-with-public-key-signatures

...