Melaksanakan Epik pada FHIR menggunakan PHP-JWT
P粉593649715
P粉593649715 2023-08-30 23:58:19
0
1
643
<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>
P粉593649715
P粉593649715

membalas semua(1)
P粉037215587

Tetap

  • Gunakan ini dan bukannya hash_mac():
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA384);
  • Pastikan jika kunci disimpan dalam pembolehubah PHP, formatkan kunci seperti berikut:
$privateKey =  "------BEGIN PRIVATE KEY------\n".
"MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7VJTUt9Us8cKj\n".
"MzEfYyjiWA4R4/M2bS1GB4t7NXp98C3SC6dVMvDuictGeurT8jNbvJZHtCSuYEvu\n".
.
.
.
"TQrKhArgLXX4v3CddjfTRJkFWDbE/CkvKZNOrcf1nhaGCPspRJj2KUkj1Fhl9Cnc\n".
"dn/RsYEONbwQSjIfMPkvxF+8HQ==\n".
"------END PRIVATE KEY------";

Sertakan setiap baris dalam petikan berganda """"括起来,并在每行末尾添加n dan tambah n di hujung setiap baris. 🎜

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan