【问题标题】:How to create a client_id and client_secret for API authentication?如何为 API 身份验证创建 client_id 和 client_secret?
【发布时间】:2021-09-23 16:08:27
【问题描述】:

我想实现从机器到机器的身份验证。我正在考虑为 API 分配一个用户一个 client_secret 和 client_id,API 1 将使用它来换取 JWT 访问令牌。

我能否只为密钥和 ID 创建 2 个唯一字符串并将它们针对用户存储在数据库中?

类似这样的事情:

import { randomUUID } from "crypto";
const bcrypt = require('bcrypt');

const saltRounds = 10;

const client_id = randomUUID();
const client_secret = randomUUID();

const salt = bcrypt.genSaltSync(saltRounds);
const hash = bcrypt.hashSync(client_secret, salt);

// store hash in database
// have API store client_secret and client_id as environment variables

然后可以使用客户端密钥/ID 在传入请求时验证 API?

【问题讨论】:

  • 是的,只要它们对每个客户都是独一无二的,这一切都很好。

标签: javascript node.js authentication oauth-2.0


【解决方案1】:

如IAM Primer 文章中所述,更标准的选择可能是在机器之间转发用户令牌。

您所做的一个可能的问题是,您正在为用户存储一个长期存在的凭据,该凭据可用于在未经用户同意的情况下访问资源。

根据具体情况,从安全角度来看,这可能很糟糕,因为如果恶意方掌握了用户的客户端 ID 和机密,他们可以作为用户进行操作,而下游 API 无法知道。

【讨论】:

  • 即使秘密可以被用户刷新?这不是 aws iam 用户的工作方式吗?他们有一组可以根据需要更新的 id 和秘密?
  • 如果用户参与了令牌的生命周期 - 并且权限与应用程序的权限相匹配,那很好。尽管在您的设置中可以这样做,但转发令牌会更简单。
猜你喜欢
  • 2022-01-24
  • 2022-10-04
  • 2017-05-06
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
相关资源
最近更新 更多