【发布时间】:2018-01-10 16:55:20
【问题描述】:
我正在尝试使用盒子应用用户 ID 创建访问令牌。我已经使用以下代码来创建盒子应用用户
curl https://api.box.com/2.0/users \
-H "Authorization: Bearer <TOKEN>" \
-d '{"name": "Ned Stark", "is_platform_access_only": true}' \
-X POST
然后给出如下结果
{"type":"user","id":"2199107004","name":"Ned Stark","login":"AppUser_399382_9BNZHI03nJ@boxdevedition.com","created_at":"2017-08-03T00:58:04-07:00"
是否可以使用盒子应用用户ID生成访问令牌?
已编辑
我已经在 BOX API 中生成了公钥。然后我有一个文件,其中包含公钥和私钥的详细信息,如下所示,
{
"boxAppSettings": {
"clientID": <Client ID>,
"clientSecret": <clientsecret>,
"appAuth": {
"publicKeyID": <publickeyid>,
"privateKey": "-----BEGIN ENCRYPTED PRIVATE KEY-----\Key heresn-----END ENCRYPTED PRIVATE KEY-----\n",
"passphrase": <phrase>
}
},
"enterpriseID": <enterpriseId>
}
然后我生成了header和payload,如下
$header = ["typ"=> "JWT", "alg"=>"RS256","kid"=> <public key id>];
$payload = [
"iss"=> "<client id>",
"sub"=> "<APP USER ID>",
"box_sub_type"=> "user",
"aud"=>"https://api.box.com/oauth2/token",
"jti"=>"<I don't know what is this>",
"exp"=>1428699385
];
$header = base64_encode(json_encode($header));
$payload = base64_encode(json_encode($payload));
在此之后,我被困在如何在这里实现私钥和公钥。实际上我有从 BOX API 下载的 JSON 文件。
我不明白JTI 是什么?如何在其中添加公钥和|或私钥 JSON 文件?怎么做?
我已经按照文档手动生成了私钥,如下
openssl genrsa -aes256 -out private_key.pem 2048
然后我给了密码“12345”。并生成如下公钥,
openssl rsa -pubout -in private_key.pem -out public_key.pem
然后我在 BOX-API 中添加了公钥,并编写了如下代码,
$data = file_get_contents('private_key.pem');
$result = openssl_pkey_get_private($data,"12345");
print_r($result);
结果如下
Resource id #4
这些看起来不像加密数据。以及在php中调用box api时如何实现private和public?
【问题讨论】:
-
好吧,您需要了解 OAuth 的一般工作原理,尤其是 OAuth 2.0:oauth.net/2。或者只是请人做这项工作。
-
看来你需要一个 JWT 令牌。在这里查看一些文档jwt.io/introduction
-
@lauda 我了解标头和有效负载,但我不了解如何添加/使用私钥?
-
@lauda 我不了解签名。?如何使用私钥创建签名?
-
有关 JWT 的更多信息,您应该阅读 RFC 文档rfc-editor.org/rfc/rfc7519.txt
标签: php rest access-token box-api box