Implementierung von Epic auf FHIR mit PHP-JWT
<p>Ich versuche, ein JWT-Token zu erhalten, aber bei allem, was ich versuche, erhalte ich jedes Mal eine Fehlermeldung. Hier sind die Dinge, die ich ausprobiert habe. Ich erhalte das JWT-Token zwar ohne das Paket, aber wenn ich die Signaturüberprüfung mit jwt.io überprüfe, schlägt es jedes Mal fehl. Bei der Verwendung dieses Pakets traten verschiedene Fehler auf wie <em>Privater Schlüssel kann nicht erzwungen werden</em> und manchmal <em>Der Algorithmus ist ungültig</em>. Bitte korrigieren Sie mich, wo ich einen Fehler gemacht habe. </p>
<ul>
<li><strong>Kein PHP-JWT</strong></li>
</ul>
<pre class="brush:php;toolbar:false;">$header = [
'alg' ="RS384",
'typ' =>
];
$payload = [
'iss' => 'meine-Kunden-ID',
'sub' => 'meine-Kunden-ID',
'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 = "mein privater Schlüssel"
$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);
// Signatur als Base64URL-String kodieren
$signature_encoded = $this->base64url_encode($signature);
$jwt = $headers_encoded.'.'.$payload_encoded.'.'.$signature_encoded;</pre>
<p><strong>- mit php-jwt</strong></p>
<ol>
<li>Das Paket ist installiert
<em>Composer benötigt Firebase/php-jwt --ignore-platform-req=ext-mongodb</em></li>
<li>Die erforderlichen Dateien in meinem Controller verwendet</li>
</ol>
<pre class="brush:php;toolbar:false;">FirebaseJWTJWT verwenden;
Verwenden Sie FirebaseJWTKey;</pre>
<ol start="3">
<li>Kodierung ausprobieren: </li>
</ol>
<pre class="brush:php;toolbar:false;">$check = JWT::encode(
$header,
$Nutzlast,
$privateKey,
'RS384'
);</pre>
<p>Ich erhalte verschiedene Fehlermeldungen wie <em>Privater Schlüssel kann nicht erzwungen werden</em> und manchmal <em>Ungültiger Algorithmus</em>. Bitte korrigieren Sie mich, wo ich einen Fehler gemacht habe. </p>
<p>Einfach ausgedrückt ist es das, was ich tue oder zu tun versuche.我的代码的通用形式:</p>
<pre class="brush:php;toolbar:false;"><?php
// Laden Sie den privaten Schlüssel aus einer Datei
$privateKey = file_get_contents('private.key');
// Den Header und die Nutzlast für das JWT festlegen
$header = [
'alg' => 'RS384',
'typ' => 'JWT'
];
$payload = [
'sub' => '1234567890',
'name' => 'John Doe',
'iat' => 1516239022
];
// Header und Payload als JSON-Strings kodieren
$headerEncoded = base64_encode(json_encode($header));
$payloadEncoded = base64_encode(json_encode($payload));
// Header, Payload und Secret verketten, um die Signatur zu erstellen
$signature = hash_hmac('sha384', "$headerEncoded.$payloadEncoded", $privateKey, true);
// Die Signatur als Base64-String kodieren
$signaturEncoded = base64_encode($signature);
// Header, Payload und Signatur verketten, um das JWT zu erstellen
$jwt = "$headerEncoded.$payloadEncoded.$signatureEncoded";
echo $jwt;</pre>
<p>