我正在尝试使用 OAuth 连接到 Asana API。我其他一切都运行正常,但是当我尝试 PKCE 时,它不起作用。
我首先生成一个代码验证器。经过一番谷歌搜索后,这是我的代码。
$code_verifier = rtrim(strtr(base64_encode(random_bytes(64)), '+/', '-_'), '=');
我将其发送到代币交易所。然后我对其进行哈希处理并对其进行 base64url 编码,并将其传递给来自浏览器的授权请求。
$hashed = hash('sha256', $code_verifier, true);
$code_challenge = rtrim(strtr(base64_encode($hashed), '+/', '-_'), '=');
$url = $asana_client->dispatcher->oauthClient->getAuthenticationUrl(
OAuthDispatcher::$AUTHORIZATION_ENDPOINT,
$asana_client_redirect_url,
array(
'state' => $state,
'code_challenge' => $code_challenge,
'code_challenge_method' => 'S256'
)
);
$result = $asana_client->dispatcher->oauthClient->getAccessToken(
OAuthDispatcher::$TOKEN_ENDPOINT,
'authorization_code',
array(
'code' => $_GET['code'],
'redirect_uri' => $asana_client_redirect_url,
'code_verifier' => $current_verifier
)
);
但是我收到了 400 错误“无效授权”,其描述为“PKCE
code_verifier
与存储的代码挑战不匹配。”
奇怪的是,如果我不将代码验证器发送到令牌交换点,它就会起作用。应该是这样吗?对我来说似乎很奇怪,但如果它不应该是这样的话,也像一个相当大的错误。
我做错了什么吗?我所做的所有谷歌搜索和我自己的双重检查使这看起来像是我应该做的......任何帮助将不胜感激。
对于任何可能发现这个问题并发现这有帮助的人......CBroe 似乎走在正确的道路上。我保存代码验证程序以发送到错误的位置的令牌交换。所以它没有发送正确的信息。现在可以使用了