手把手带你学扣子Coze之使用JWT获取Access Token

授权流程如下:

  1. 在扣子平台创建 OAuth 应用。

  2. 应用程序通过公钥和私钥签署 JWT。

  3. 应用程序通过 通过 JWT 获取 Oauth Access Token API,获取访问令牌。

  4. 应用程序根据访问令牌调用扣子 API。

创建应用

首先,创建一个新应用

客户端类型选择“服务类应用”,其他的随意

创建Key,此时会自动下载一个文件。文件里面是私钥,

红框中这一串是公钥,记住这两个值

权限根据自己的需要选择,如果调用Chat SDK的话,选择以下四个权限:

  • Bot管理

  • 会话管理

  • 文件

  • 消息

点击确定,此时会让你同意授权,继续点击确定

最后,记录住这个应用ID

我们一个需要三个Key,分别是:应用ID、公钥、私钥

签署JWT

Header参数

{

"alg": "RS256", // 固定为RS256

"typ": "JWT", // 固定为 JWT

"kid": "gdehvaDegW....." // 刚才创建应用的公钥

}

Payload参数

{

"iss": "310000000002", // OAuth 应用的 ID

"aud": "api.coze.cn", //扣子 API 的Endpoint,固定

"iat": 1516239022, // 现在的时间戳

"exp": 1516259022, // JWT过期时间,秒级时间戳

"jti": "fhjashjgkhalskj", // 随机字符串,防止重放攻击

"session_name":"1234" // 访问令牌的会话标识

}

注意这个session_name参数,这是Chat SDK中实现用户会话隔离的唯一方法。

请保证这个参数每个用户是唯一且不重复。

如果重复或未指定 session_name,不同用户的对话历史可能会掺杂在一起。

生成JWT

参考以下Python代码,生成JWT

获取到这段字符串

获取Access Token

根据以下格式发送请求,即可获取到Access Token

 

curl --location --request POST 'https://api.coze.cn/api/permission/oauth2/token' --header 'Content-Type: application/json' --header 'Authorization: Bearer JWT字符串' --data '{ "duration_seconds": 86399, "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer" }'

对此,继续提供封装好的Python 函数,可以直接调用

获取到以下Token

后续可用这个Token发起任何请求

 

### 实现 JWT 鉴权 #### 创建 Token 为了创建 JSON Web Token (JWT),首先定义头部信息,其中声明所使用的签名算法以及令牌类型。例如,在采用 HMAC SHA-256 加密方法的情况下,头部结构如下所示[^1]: ```json { "alg": "HS256", "typ": "JWT" } ``` 此部分需转换成 Base64Url 编码形式作为最终 token 的一部分[^2]。 #### Payload 定义 负载(payload)包含了实际的数据,通常会包含一些预定义的声明(standard claims),公共声明(public claims)或是私有声明(private claims)。这些数据会被同样地进行 Base64Url 编码处理并附加到头部之后形成完整的未加密token主体。 #### 签名生成 最后一步是对上述两部分内容加上一个秘密(secret key)通过指定的哈希函数计算得出签名值。这个过程确保了消息完整性并且可以用来验证发送者身份的真实性。整个流程可以用下面伪代码表示: ```javascript const signingKey = 'your_secret_key'; // 假设 header 和 payload 已经被编码过 let signature = crypto.createHmac('sha256', signingKey).update(encodedHeader + '.' + encodedPayload).digest('base64url'); ``` #### Node.js 应用中的应用实例 在一个基于 Koa 或 Express 框架构建的应用程序里,可以通过引入 `koa-jwt` 中间件来简化鉴权逻辑[^4]: ```javascript app.use(koajwt({ secret: 'test_token' }).unless({ path: [ /^\/api\/register/, /^\/api\/login/ ] })); ``` 这段配置使得除了 `/api/register` 和 `/api/login` 路径外的所有请求都需要携有效的 JWT 才能继续执行下去;而这两个路径则允许匿名访问用于用户登录或注册操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值