我想实现从机器到机器的身份验证。我正在考虑为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?
2条答案
按热度按时间bcs8qyzn1#
一个更标准的选项可能是在机器之间转发用户令牌,如本文IAM Primer所述。
您所做的一个可能的问题是,您正在为用户存储一个长期有效的凭据,该凭据可用于在未经用户同意的情况下访问资源。
根据场景的不同,从安全的Angular 来看,这可能是不好的,因为如果恶意方掌握了用户的客户端ID和秘密,他们可以作为用户操作,下游API无法知道。
ctehm74n2#