gpt4 book ai didi

oauth-2.0 - 使用 PKCE 的授权代码流如何比没有 client_secret 的授权代码流更安全

转载 作者:行者123 更新时间:2023-12-02 02:23:43 25 4
gpt4 key购买 nike

很可能我误解了这个主题的某些内容或者在实现过程中遗漏了一些内容

我浏览了 Auth0 的文档,通过端点而不是 SDK 使用 PKCE 创建授权代码流,我看到我们提出了如下挑战和验证器(来自 auth0 文档):

// Dependency: Node.js crypto module
// https://nodejs.org/api/crypto.html#crypto_crypto
function base64URLEncode(str) {
return str.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
var verifier = base64URLEncode(crypto.randomBytes(32));

// Dependency: Node.js crypto module
// https://nodejs.org/api/crypto.html#crypto_crypto
function sha256(buffer) {
return crypto.createHash('sha256').update(buffer).digest();
}
var challenge = base64URLEncode(sha256(verifier));

然后我们将挑战传递给授权端点,如下所示(来自 auth0 文档):

https://YOUR_DOMAIN/authorize?
response_type=code&
code_challenge=CODE_CHALLENGE&
code_challenge_method=S256&
client_id=YOUR_CLIENT_ID&
redirect_uri=YOUR_CALLBACK_URL&
scope=SCOPE&
audience=API_AUDIENCE&
state=STATE

并将代码和验证器传递给 token 端点,如下所示(再次来自 auth0 文档):

curl --request POST \
--url 'https://YOUR_DOMAIN/oauth/token' \
--header 'content-type: application/x-www-form-urlencoded' \
--data grant_type=authorization_code \
--data 'client_id=YOUR_CLIENT_ID' \
--data code_verifier=YOUR_GENERATED_CODE_VERIFIER \
--data code=YOUR_AUTHORIZATION_CODE \
--data 'redirect_uri=https://YOUR_APP/callback'

实现是一件相当简单的事情,但我不明白为什么另一个应用程序不能提出相同的挑战和验证器并模拟我们的应用程序?

我认为我们不使用 client_secret 作为授权代码流,暴露的 client_secret 使黑客更容易尝试生成 token 并错误地模拟我们的应用程序,为什么他们不能简单地模拟质询和验证程序?

最佳答案

PKCE 就是验证发起初始身份验证请求的客户端是否与使用授权码获取真实 token 的客户端相同。

与需要客户端进行检查的 State/Nonce 安全功能相比,PKCE 是一种在身份提供者端实现的保护检查。

PKCE 与客户端 key 完全无关。

关于oauth-2.0 - 使用 PKCE 的授权代码流如何比没有 client_secret 的授权代码流更安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66043006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com