Melaksanakan Epik pada FHIR menggunakan PHP-JWT
<p>Saya cuba mendapatkan token jwt tetapi semua yang saya cuba memberi saya ralat setiap kali. Berikut adalah perkara yang saya telah cuba. Saya mendapat jwt-token tanpa pakej, tetapi apabila saya menyemak pengesahan tandatangan menggunakan jwt.io ia gagal setiap kali. Semasa menggunakan pakej ini saya menghadapi ralat yang berbeza seperti <em>Kunci peribadi tidak boleh dikuatkuasakan</em> dan kadangkala <em>Algoritma tidak sah</em>. Tolong betulkan saya di mana saya salah. </p>
<ul>
<li><strong>Tiada php-Jwt</strong></li>
</ul>
<pre class="brush:php;toolbar:false;">$header = [
'alg' ="RS384",
'taip' => "JWT"
];
$payload = [
'iss' => 'id-klien-saya',
'sub' => 'id-klien-saya',
'aud' => "https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token",
'jti' => (rentetan)strttotime(gmdate("Y-m-d H:i:s")),
'exp' => strtotime(gmdate("Y-m-d H:i:s")) + 270,
];
$privateKey = "Kunci peribadi saya"
$headers_encoded = $this->base64url_encode(json_encode($header));
$payload_encoded = $this->base64url_encode(json_encode($payload));
$signature = hash_hmac('sha384', $headers_encoded.'.'.$payload_encoded, $privateKey, true);
// Mengekodkan tandatangan sebagai rentetan base64url
$signature_encoded = $this->base64url_encode($signature);
$jwt = $headers_encoded.'.'.$payload_encoded.'.'.$signature_encoded;</pre>
<p><strong>- menggunakan php-jwt</strong></p>
<ol>
<li>Pakej dipasang
<em>Komposer memerlukan firebase/php-jwt --ignore-platform-req=ext-mongodb</em></li>
<li>Menggunakan fail yang diperlukan dalam pengawal saya</li>
</ol>
<pre class="brush:php;toolbar:false;">gunakan FirebaseJWTJWT;
gunakan FirebaseJWTKey;</pre>
<ol start="3">
<li>Cuba pengekodan: </li>
</ol>
<pre class="brush:php;toolbar:false;">$check = JWT::encode(
$header,
$payload,
$privateKey,
'RS384'
);</pra>
<p>Saya mendapat ralat yang berbeza seperti <em>Tidak dapat menguatkuasakan kunci peribadi</em> dan kadangkala <em>Algoritma tidak sah</em>. Tolong betulkan saya di mana saya salah. </p>
<p>Ringkasnya, inilah yang saya lakukan atau cuba lakukan.我的代码的通用形式:</p>
<pre class="brush:php;toolbar:false;"><?php
// Muatkan kunci peribadi daripada fail
$privateKey = file_get_contents('private.key');
// Tetapkan pengepala dan muatan untuk JWT
$header = [
'alg' => 'RS384',
'taip' => 'JWT'
];
$payload = [
'sub' => '1234567890',
'nama' => 'John Doe',
'iat' => 1516239022
];
// Mengekodkan pengepala dan muatan sebagai rentetan JSON
$headerEncoded = base64_encode(json_encode($header));
$payloadEncoded = base64_encode(json_encode($payload));
// Gabungkan pengepala, muatan dan rahsia untuk mencipta tandatangan
$signature = hash_hmac('sha384', "$headerEncoded.$payloadEncoded", $privateKey, true);
// Mengekodkan tandatangan sebagai rentetan base64
$signatureEncoded = base64_encode($signature);
// Gabungkan pengepala, muatan dan tandatangan untuk mencipta JWT
$jwt = "$headerEncoded.$payloadEncoded.$signatureEncoded";
echo $jwt;</pre>
<p>我确实得到了 jwt 签名,但在 https://jwt.io/ 上它显示未经验证。</p>