Implémentation d'Epic sur FHIR à l'aide de PHP-JWT
<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>