【问题标题】:How to handle external API's JWT authentication from my Django application?如何处理来自我的 Django 应用程序的外部 API JWT 身份验证?
【发布时间】:2020-06-20 03:23:17
【问题描述】:

我正在为我的 Django 应用程序使用外部 RESTful API,我想了解如何从我的 Django 应用程序处理 API 的 JWT 身份验证

以下是文档中提到的 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 更新我的令牌吗? 目前,我必须手动运行此代码并在需要时更新令牌? 有没有更好的方法?

谢谢。

【问题讨论】:

    标签: python node.js django jwt


    【解决方案1】:

    我对 Python 了解不多。但是由于这个 Node.js 代码 sn-p 来自 API 的文档,所以你应该按照逻辑将 node.js 转换为 python。

    什么是 JSON Web Token?

    JSON Web Token (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。

    简而言之,它是一种双向加密(或签名)JSON 对象,可用作受信任的令牌或信息。它广泛用于 REST API,因为它们是无状态的,并且您无法在服务器中设置会话。

    什么是 JSON Web Token 结构?

    在其紧凑的形式中,JSON Web Tokens 由由点 (.) 分隔的三部分组成,它们是:

    • 标题
    • 有效载荷
    • 签名
    • 标头包含使用的签名算法(SHA256 或 RSA 等)。
    • Payload 包含 JWT 中的实际数据。

    有效载荷可能包含 Registered claims,例如 follwing:

    issIssuer标识发布 JWT 的委托人。

    subSubject 标识 JWT 的主题。

    iat发行于 标识 JWT 的发行时间。该值必须是 NumericDate。

    expExpiration Time 标识过期时间,超过该时间后,JWT 不得被接受处理。该值必须是整数或小数的 NumericDate,表示 1970-01-01 00:00:00Z 之后的秒数。

    代码中发生了什么?

    • jsonwebtoken 是 JWT 的 Node.js 实现。

    • jwtjsonwebtoken 的别名)将在名为 devSandbox.key 的文件中使用 privateKey 签署您的 JWT。我想这个密钥应该是由 API 提供者提供的。

    • 签名算法为RS512

    • Issuer 设置为adf50bf3-8b0f-479d-962d-4031ebadac9a。我想这是您在 REST API 服务器中的 APP_ID

    • 有效期设置为 30 分钟。

    • 主题设置为sbMem5c3418773ef071。这可能在 API 提供程序中用于访问控制(用于会话或用户 ID 等)。

    建议

    • 使用 JWT 的 Python 实现来签署您的令牌。例如:python-jwt
    • 每当您在 Python 代码中向 REST API 发送请求时,将生成的 jwt 附加到您的请求标头。卷曲示例:
    curl http://rest.api.server/api/ -H 'Authorization: Bearer {GENERATED_JWT}'
    

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 1970-01-01
      • 2017-05-29
      • 2011-10-22
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多