Implémentation d'Epic sur FHIR à l'aide de PHP-JWT
P粉593649715
P粉593649715 2023-08-30 23:58:19
0
1
646
<p>J'essaie d'obtenir un jeton jwt mais tout ce que j'essaie me donne une erreur à chaque fois. Voici les choses que j'ai essayées. J'obtiens le jeton jwt sans le package, mais lorsque je vérifie la vérification de la signature à l'aide de jwt.io, elle échoue à chaque fois. Lors de l'utilisation de ce package, j'ai rencontré différentes erreurs telles que <em> La clé privée ne peut pas être appliquée</em> et parfois <em> L'algorithme n'est pas valide</em>. S'il vous plaît, corrigez-moi là où j'ai fait une erreur. </p> <ul> <li><strong>Pas de php-Jwt</strong></li> </ul> <pre class="brush:php;toolbar:false;">$header = [ 'alg' => "RS384", 'type' => ]; $charge utile = [ 'iss' => 'mon-identifiant-client', 'sub' => 'mon-identifiant-client', 'aud' => "https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token", 'jti' => (string)strtotime(gmdate("Y-m-d H:i:s")), 'exp' => strtotime(gmdate("Y-m-d H:i:s")) + 270, ]; $privateKey = "ma clé privée" $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); // Encode la signature sous forme de chaîne base64url $signature_encoded = $this->base64url_encode($signature); $jwt = $headers_encoded.'.'.$payload_encoded.'.'.$signature_encoded;</pre> <p><strong>- en utilisant php-jwt</strong></p> <ol> <li>Le package est installé <em>Composer nécessite firebase/php-jwt --ignore-platform-req=ext-mongodb</em></li> <li>J'ai utilisé les fichiers requis dans mon contrôleur</li> </ol> <pre class="brush:php;toolbar:false;">utilisez FirebaseJWTJWT ; utilisez FirebaseJWTKey;</pre> <ol start="3"> <li>Essayez l'encodage : </li> </ol> <pre class="brush:php;toolbar:false;">$check = JWT::encode( $en-tête, $charge utile, $clé privée, 'RS384' );</pré> <p>Je reçois différentes erreurs telles que <em>Impossible d'appliquer la clé privée</em> et parfois <em>Algorithme invalide</em>. S'il vous plaît, corrigez-moi là où j'ai fait une erreur. </p> <p>En termes simples, c'est ce que je fais ou j'essaie de faire.我的代码的通用形式:</p> <pre class="brush:php;toolbar:false;"><?php // Charge la clé privée depuis un fichier $privateKey = file_get_contents('private.key'); // Définit l'en-tête et la charge utile du JWT $en-tête = [ 'alg' => 'RS384', 'type' => 'JWT' ]; $charge utile = [ 'sous' => '1234567890', 'nom' => "John Doe", 'iat' => 1516239022 ]; // Encodez l'en-tête et la charge utile sous forme de chaînes JSON $headerEncoded = base64_encode(json_encode($header)); $payloadEncoded = base64_encode(json_encode($payload)); // Concatène l'en-tête, la charge utile et le secret pour créer la signature $signature = hash_hmac('sha384', "$headerEncoded.$payloadEncoded", $privateKey, true); // Encode la signature sous forme de chaîne base64 $signatureEncoded = base64_encode($signature); // Concatène l'en-tête, la charge utile et la signature pour créer le JWT $jwt = "$headerEncoded.$payloadEncoded.$signatureEncoded"; echo $jwt;</pre> <p>
P粉593649715
P粉593649715

répondre à tous(1)
P粉037215587

Corrigé

  • Utilisez ceci à la place de hash_mac() :
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA384);
  • Assurez-vous que si la clé est stockée dans une variable PHP, formatez-la comme suit :
$privateKey =  "------BEGIN PRIVATE KEY------\n".
"MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7VJTUt9Us8cKj\n".
"MzEfYyjiWA4R4/M2bS1GB4t7NXp98C3SC6dVMvDuictGeurT8jNbvJZHtCSuYEvu\n".
.
.
.
"TQrKhArgLXX4v3CddjfTRJkFWDbE/CkvKZNOrcf1nhaGCPspRJj2KUkj1Fhl9Cnc\n".
"dn/RsYEONbwQSjIfMPkvxF+8HQ==\n".
"------END PRIVATE KEY------";

Placez chaque ligne entre guillemets doubles """"括起来,并在每行末尾添加n et ajoutez n à la fin de chaque ligne. 🎜

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal