PHP OAuth 2.0 JWT承载令牌流

PHP OAuth 2.0 JWT承载令牌流,php,salesforce,rsa-sha256,Php,Salesforce,Rsa Sha256,我正在尝试从Salesforce获得JWT承载令牌。 我试图按照他们的文件,但没有成功。 我得到的返回是{“error”:“invalid_grant”,“error_description”:“invalid assertion”} 这是我的代码,我不确定这是怎么回事。需要帮助以获取返回的承载令牌 谢谢你,谢谢你的帮助 <?php /** * Encode data to Base64URL * @param string $data * @return boolean|str

我正在尝试从Salesforce获得JWT承载令牌。 我试图按照他们的文件,但没有成功。

我得到的返回是{“error”:“invalid_grant”,“error_description”:“invalid assertion”}

这是我的代码,我不确定这是怎么回事。需要帮助以获取返回的承载令牌

谢谢你,谢谢你的帮助

<?php

/**
 * Encode data to Base64URL
 * @param string $data
 * @return boolean|string
 */
function base64url_encode($data)
{
    return strtr(base64_encode($data), '+/', '-_');
}

define('CONSUMER_KEY', 'abc123');
define('CONSUMER_SECRET', 'abc123secret');
define('LOGIN_BASE_URL', 'https://login.salesforce.com');

//Json Header
$headerArray = array(
    "alg" => "RS256"
);

$jsonHeader = json_encode(($headerArray));
$header = base64url_encode($jsonHeader);

//Create JSon Claim/Payload
$expiration = strval(time() + (5 * 60));

$claimSet = array(
    "iss" => CONSUMER_KEY,
    "sub" => "test@email.com",
    "aud" => LOGIN_BASE_URL,
    "exp" => $expiration
);
$jsonClaimSet = (json_encode($claimSet));
$payload = base64url_encode($jsonClaimSet);

$encoded_JWT = $header . '.' . $payload;

// LOAD YOUR PRIVATE KEY FROM A FILE - BE CAREFUL TO PROTECT IT USING
$private_key = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
testtesttesttest
-----END RSA PRIVATE KEY-----
EOD;

// This is where openssl_sign will put the signature
$signature = "";
// SHA256 in this context is actually RSA with SHA256
$algo = "SHA256";
// Sign the header and payload
openssl_sign($encoded_JWT, $signature, $private_key, $algo);


// Base64 encode the result
$secret = base64url_encode($signature);

$token = $header . '.' . $payload . '.' . $secret;

$token_url =  LOGIN_BASE_URL.'/services/oauth2/token';

$post_fields = array(
    'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
    'assertion' => $token
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $token_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
// curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type : application/x-www-form-urlencoded"));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

$token_request_body = curl_exec($ch)
or die("Call to get token from code failed: '$token_url' - ".print_r($post_fields, true));

print_r($token_request_body);
?>

您的问题解决了吗?我也面临同样的问题你的问题解决了吗?我也面临同样的问题