提供的密钥参数不能强制转换为私钥

Posted

技术标签:

【中文标题】提供的密钥参数不能强制转换为私钥【英文标题】:Supplied key param cannot be coerced into a private key 【发布时间】:2019-05-29 14:54:58 【问题描述】:

我正在尝试使用 JWT Bearer 执行 OAuth2 的步骤 here,我已包含 installation instructions 中所述的相应文件。

但是,当我运行以下 php 代码时:

$private_key = file_get_contents("/www/var/includes/keyfile.pem");
$client_id   = 'example_client_id';
$user_id     = 'example_user_id';
$grant_type  = 'urn:ietf:params:oauth:grant-type:jwt-bearer';
$jwt = generateJWT($private_key, $client_id, $user_id, 'https://api.example.com');

...我收到以下错误:

openssl_sign(): supplied key param cannot be coerced into a private key

Uncaught exception 'Exception' with message 'Unable to sign data.'

我已经读到使用“file_get_contents”可能不是最好的方法,已经尝试了其他方法但没有运气。第一个链接中的文档特别说要使用它,这似乎很奇怪?

【问题讨论】:

听起来你的keyfile.pem文件有问题 从您链接的示例中,他们使用 generateJWT 和 RSA 私钥(来自公钥/私钥对)。 .pem 文件通常是证书 好的,有道理!您知道将 .pem 文件与 JWT 一起使用的方法吗? .pem 是此 API 的要求。 这里有个例子~bshaffer.github.io/oauth2-server-php-docs/overview/… 【参考方案1】:
    准备“私钥ID”:
   $fp = fopen("/path/to/file/privatekey.pem", "r");
   
   $privKey = fread($fp, 8192);
   
   fclose($fp);

   $pKeyId = openssl_get_privatekey($privKey, 'optional_passphrase');

    在 openssl_sign 中使用:

openssl_sign($dataToSign, $signatureVar, $pKeyId);

信用:https://rupom.wordpress.com/2015/09/19/openssl_sign-supplied-key-param-cannot-be-coerced-into-a-private-key/

【讨论】:

以上是关于提供的密钥参数不能强制转换为私钥的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER中强制类型转换cast和convert的区别

Linux-Nginx-生产ssl密钥对

java中的强制类型转换

Android:AsyncTask Object[] 不能在 doInBackground 中强制转换

强制类型转换

我一直收到一个警告,关于传递参数使得指针来自整数而没有强制转换