在 passport js OAuth 2.0 中启用 Proof 有什么作用?它是否启用pkce?

What does enableProof do in passportjs OAuth 2.0? Does it enable pkce?

我想实施 oAuth2.0,但在阅读了 oAuth 2.0 后,我的理解是它应该使用授权代码授权类型,并且还应该使用 PKCE。我正在使用 passportJs 来实现 oAuth2.0,但与此同时,我不希望出现任何类型的安全漏洞安全问题。我知道 passportJs 使用默认的授权码授权流程。但我也想用它来实现 PKCE。他们的文档中提到了护照 enableProof: true。这会启用 PKCE 吗?

enableProof 与 PKCE 无关。 PKCE 是 执行 oAuth 身份验证时使用的安全措施。 oAuth 身份验证会生成访问令牌。您使用该访问令牌来执行 API 请求。 EnableProof 启用 appsecret_proof 这是另一种安全措施,在 获得访问令牌后使用 ,以防止其他人代表您进行 API 调用只有访问令牌。当 enableProof 设置为 True 时,appsecret_proof 参数被添加到每个 API 调用。

由于访问令牌是可移植的,因此可以从客户端窃取令牌并代表该客户端进行调用。访问令牌也可能被个人计算机上的恶意软件或中间人攻击窃取。

您可以通过将 appsecret_proof 参数添加到来自服务器的每个 API 调用并启用设置以要求对所有调用进行证明来防止这种情况。应用秘密证明是您的访问令牌的 sha256 哈希值,使用应用秘密作为密钥。如果将 enableProof 设置为 true,所有这些都由 PassportJs 处理。

PassportJs 本机 oauth2 包也 supports pkce 选项 pkce 设置为 True。如果您使用 passport-facebook 包,这取决于本机包,您也可以使用该设置。所以只需将此添加到您的配置中:

state: true,
pkce: true

你应该是金色的。您甚至可以在身份验证后添加 enableProof: true 以获得额外的安全性。