Как обрабатывать JWT-аутентификацию внешнего API из моего Django приложения? - PullRequest
0 голосов
/ 07 марта 2020

Я использую внешний RESTful API для моего Django приложения, я хочу понять, как обрабатывать JWT-аутентификацию для API из моего Django приложения

Ниже приведен код генерации токена JWT, как упомянуто в документации:

'use strict';

const path = require('path');
const fs = require('fs');

var jwt = require('jsonwebtoken');
var privateKey = fs.readFileSync("./devSandbox.key","utf8");
var payload = {};
var currentTime =  Math.floor(Date.now() / 1000);
var signOptions = {
    algorithm: "RS512"
};

payload.iss = "adf50bf3-8b0f-479d-962d-4031ebadac9a";
payload.iat = currentTime;
payload.exp = currentTime + 1800;
payload.sub = "sbMem5c3418773ef071";

var token = jwt.sign(payload, privateKey, signOptions);
console.log("Printing token: "+ token);

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

Спасибо.

1 Ответ

0 голосов
/ 07 марта 2020

Я не знаю много о Python. Но поскольку этот фрагмент кода Node.js взят из документа API, вы должны следовать логике c и преобразовать node.js в python.

Что такое JSON Web Token?

JSON Web Token (JWT) - это открытый стандарт (RF C 7519), который определяет компактный и автономный способ безопасной передачи информации между сторонами в виде объекта JSON. .

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

Что такое структура JSON Web Token?

В компактном виде JSON веб-токены состоят из трех частей, разделенных точками (.), Которые:

  • Заголовок
  • Полезная нагрузка
  • Подпись
  • Заголовок содержит используемый алгоритм подписи (SHA256 или RSA и т. Д. c).
  • Полезная нагрузка содержит фактические данные в JWT.

Полезная нагрузка может содержать Зарегистрированные заявки , такие как , следующие :

iss : Эмитент Идентифицирует принципала, выдавшего JWT.

sub : Subject Идентифицирует субъект JWT.

iat : Выдано в Указывает время, когда был выпущен JWT. Значение должно быть NumericDate.

exp : Время истечения Указывает время истечения, после которого JWT не должен быть принят для обработки. Значение должно быть NumericDate или целым или десятичным числом, представляющим секунды после 1970-01-01 00: 00: 00Z.

Что происходит в коде?

  • jsonwebtoken - это Node.js реализация JWT.

  • jwt (псевдоним jsonwebtoken) подпишет ваш JWT использует privateKey в файле с именем devSandbox.key. Я полагаю, этот ключ должен был быть предоставлен провайдером API.

  • Алгоритм подписи RS512.

  • Эмитент установлен как adf50bf3-8b0f-479d-962d-4031ebadac9a , Я предполагаю, что это ваш APP_ID на сервере REST API.

  • Срок действия установлен как 30 минут.

  • Тема установлена ​​как sbMem5c3418773ef071. Это может быть использовано в провайдере API для контроля доступа (для сеанса или идентификатора пользователя и тому подобного).

Предложение :

  • Используйте Python реализацию JWT для подписи вашего токена. Например: python -jwt
  • Присоединять сгенерированный jwt к заголовку вашего запроса всякий раз, когда вы отправляете запрос в REST API в коде Python. Пример скручивания:
curl http://rest.api.server/api/ -H 'Authorization: Bearer {GENERATED_JWT}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...