2016-09-20 17 views
3

私はGitHub integrationを登録し、RSA秘密鍵(PEMファイル)をダウンロードしました。私のPHPスクリプトでは、私はこのように、私のトークンをエンコードするためにthis libraryを使用しています:JWT for GitHub Integrations APIの不正なクレデンシャル

-----BEGIN RSA PRIVATE KEY----- 
MIIEpQIBAAKCAQEA1bT61yW2fo4SI6TZXo+3dsyyxitcsw0kdhoGufsEkgdqbpeF 
2/TfJtwYj9Veq11LNHuyoYk51DxUIyoC2Ul45E/s9kOw+qjXDJAOf3z9kq+obcOL 
145ivQwsRF8bB1MQf8YsE/jAhVdxdIfRbw4UG8Fn0RPce/WQ18RI7Li4xfM138RP 
2MQhZsx289ale7n+OtDzzajC4oj9qlaNFFKpSuCVGf6fqnktCOoFu1+ouB/+u3oc 
eneS/qmSxwI7N7MrxOTnoHqhxIiatNFisK85Anc/WZ9duWS9i88GhtK86YMaWnCj 
5nodzFwSF6SzBS+iOrI2AJennOTjsOrtjjQXzQIDAQABAoIBAQDKVhoRTfGljRn7 
iX8NGwFXh6PUIQYZuN3GvAmWWOYQ5NiOcQQaJ5SIlGbk9940XZZw0JVmgCiym5QF 
3ybnV7sQX+Q5ngmYqfdCO7qeVlc3ZP0RP83Nf1BZMYdQDMPogWrjr1vYZPLSzOHs 
tRNEFI5RYSLMQAPHkc9bmsp45sR7FXj+tZEjM3NkcF4n8Jud/ARVAX/tzOWfF6A4 
rhtGJfqYCvEF69J/dsHyy28egawrTxqPd6d1BKLdOh05xHkFL26wtgJWpHcNAZNZ 
DUZs0Twe6Cw3XYQtlUD6D5mkj3zzh5hZ4xsoKftNfD2ZA1N0RVks0j5wrUjPI6jV 
bVDRvvbBAoGBAPp2yjhTuchwpVOcGVYnqF1jVgXssSYdiydUglKtxzhta7c23xqK 
v5B/cWdsz8mIKFmOcjr97GFUT8K6sZG77im05gDBCV7YuIMwekNmZ3m1MqUWtiZY 
sEqCarIYPzQk9iPPxyZrmOVL/5KqlgRj9YmYFzjLpfnaxvk4rIMyVF21AoGBANpu 
NLw7LfufPeSbIkSIeZ6X1ndspuZDzWVjgi0hmVdozMwxT1wmfoinJ27gxhKStwmG 
9kbYE4QbGBSAlkJqoSf8QWVIH+/Qq9/9mbi1T4p+AgJSYiz1voOGnOk0RoJku6Zn 
9XkcGXCUh5ckxWyYbXjHqBqHTXHeJzk9zoRfBuC5AoGBAI1/yPUTkBUGVtCqksHS 
u9KuyS2lr9spu7DnlIzjMnbVkpI6hMa49krLRSU6GxXvP2SBDlX3mLDP8hPAZ4s+ 
0elsErkAVavo4izzmU80rmbbEJamAxgc6NPfZCnjeumZrBlFTGyPQxzf165jg0dN 
ta0baJskqktC50BrXULtjy41AoGANa4j06aPlGj8IvRlJYaMrQcPs+XF1o0PKz2b 
PlAliS++NOhhYnorWpYJwNwIkYPw66x5VcvAcBTghBld1BC0bkk2IRfqkVstAi0m 
3Bfi5lw1TjDE49u46EXqxf0M3vq2ixy9XPgk4GAAOorU4e1L6gTXMT3TMIqyBQVF 
fY6E+DECgYEA22HhPud5KLAX6drbMEe54uttiUrs/K3nft/xTYWU1BIG9r/HPKQh 
3OWD/Dknek+i5hW89OOROPaUmnjaTR3/ARAxTlpxDdBWKu2mCXS/LcdEWdy7teEu 
dDbqqotO4jmTh94FVWgVLDVVmrVSp++fwstI6foPGPABlbsrJxyGUsc= 
-----END RSA PRIVATE KEY----- 

と私:

use Firebase\JWT\JWT; 

$token = [ 
     "iat" => time(), 
     "exp" => time() + 3600, 
     "iss" => $my_integration_id 
]; 
$key = file_get_contents($path_to_pem_file); 
echo JWT::encode($token, $key, "RS256"); 

PEMファイルは、この(私はすでに秘密鍵を再生成している)のようなものですJWT::encodeにこの文字列全体を渡され、この出力を得た:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE0NzQzOTI0NjQsImV4cCI6MTQ3NDM5NjA2NCwiaXNzIjoyMDF9.ZodSJyrq_SJfLTx4ifnCRWC9cbX1NmqOY3bADcuU7Wc18oZnH3EtZErvLgW6-reuR1-flsNbrji2dL9Zsm3rE-1FtEambcs1Xxynz3PE42yFMimQ5WyiAHdJhbh8-fB0hLIxn2I0oBiJbpZp92Rm2E2xxA1m4lmAubatY0JDR3FS4MmjR-pOZRbkgA4QwaTb0Q7R0tSUaoJo1ETLZoApp5ofsyt5hciB7wogTigA08H4r8TBUuSY4LeHWX9IfmDqHh5gVLDHhFXuLp1Qfm-8ltnLMgcelTmA9QE9NxxVcHQtYvNnE-EvXsh04Oqiyg51eq5cDoc4wA_WhTB4w-9NWg 

私はbashの変数に(改行を付けずに、私は確認することができます)、この出力を保存します、このようGitHubのAPIにアクセスしようとした:私はGitHubのAPIの禅は、統合には適用されませんので、それが失敗していることが疑わ

{ 
    "message": "Bad credentials", 
    "documentation_url": "https://developer.github.com/v3" 
} 

:しかし、GitHubのからのJSON応答がある

curl -i -H "Accept: application/vnd.github.machine-man-preview+json"\ 
     -H "Authorization: Bearer $JWT" https://api.github.com/zen 

トークンが、これは問題ではないようです。特に、メッセージにBad Credentialsと表示されます。しかし、私はすでにGitHub documentationのすべての手順に従っています。私は間違ってPHPスクリプトを書いていますか?

+0

私は暗号を除いてこれに関する熟練者ではありませんが、私はドキュメントを熟読しました。複数の統合IDと秘密鍵があり、正しい秘密鍵とその統合IDが一致していない可能性がありますか? –

+0

私が知る限り、このトークンは秘密鍵から純粋に生成されていることを知っています。確かに私はそれが私が選んだURLの問題だと思っていましたが、それは起こりそうもありません。 – SOFe

答えて

2

私は過去3日間、401の悪質なクレデンシャルレスポンスに対して頭を叩きました。

ちょうどそれが機能していることを前提にして、私はあなたの最初の仮定が正しいことを伝えることができます:エンドポイントが統合のために設定されていない場合は、

あなたがチェックしなければならないもう1つのことは、送信する時間が整数だということです。浮動小数点数を送信すると、401が返されます。 (私はPythonを使用していますが、datetimeクラスにはUnixエポックに変換するメソッドがありませんので、2分の1を返していた自分自身を書きました)

So既存のコードをエンドポイントに対して試してください。エンドポイントは統合のために有効になっていると文書化されています。

は、あなたの最初の要求が続いて、最後の要求と同じ許可ヘッダーでそのURLへの応答からaccess_tokens_urlを読んで、POSTヘッダAuthorization: Bearer $JWT

GET /integration/installationsとすべきであることを覚えておいてください。 (あなたの統合が複数のインストールのために有効になっている場合は、複数のURLを持っています)

次に、あなたはそれがAuthorization: token $TOKENだように、あなたは、ヘッダーを変更する必要があり、その時点で、反応してtokenフィールドを取得します。

また、必要に応じて再認証できるように保存する必要があるアクセストークンで返された有効期限の時間も得られます。

関連する問題