OAuth 2 クライアントを Workday に実装しようとしていますが、トークンを要求しようとしてハングアップしています。認証エンドポイントを呼び出すと、認証コードを使用してコールバックにリダイレクトされますが、認証コードをトークン エンドポイントにポストしようとすると、次のようになります。
"{\"error\" : \"application=service - invalid_request\"}"
request_uri で URL エンコーディングのさまざまな組み合わせを試しました。状態パラメーターを渡そうとしました。実際に正しい情報を送信していることを確認するために、呼び出しをプロキシすることさえしました。これは、トークンを取得しようとするために私が書いた PHP コードです。
function callback() {
$code = $_GET["code"];
log_message('info', 'Using code: ' . $code);
$url = "https://wd5-impl-services1.workday.com/ccx/oauth2/<redacted>/token";
$data = array(
'client_id' => '<redacted>',
'client_secret' => '<redacted>',
'grant_type' => 'authorization_code',
'code' => $code,
'redirect_uri' => 'https://<redacted>/account/callback'
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
$result = curl_exec($curl);
log_message('info', json_encode(curl_getinfo($curl)));
curl_close($curl);
log_message('info', json_encode($result));
#redirect(base_url()."account/login");
}
私は何が悪いのか途方に暮れています。すべてのフォーラムをくまなく調べ、他の OAuth 2 サーバーに関する会話と比較しようとしましたが、特定の問題については何も見つかりません。Workday でこれを成功させた人は他にいますか?