suchen

Heim  >  Fragen und Antworten  >  Hauptteil

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>
P粉593649715P粉593649715459 Tage vor654

Antworte allen(1)Ich werde antworten

  • P粉037215587

    P粉0372155872023-08-31 14:09:36

    已修复

    • 使用它代替hash_mac()
    openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA384);
    • 确保密钥是否存储在 PHP 变量中,按如​​下格式设置密钥:
    $privateKey =  "------BEGIN PRIVATE KEY------\n".
    "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7VJTUt9Us8cKj\n".
    "MzEfYyjiWA4R4/M2bS1GB4t7NXp98C3SC6dVMvDuictGeurT8jNbvJZHtCSuYEvu\n".
    .
    .
    .
    "TQrKhArgLXX4v3CddjfTRJkFWDbE/CkvKZNOrcf1nhaGCPspRJj2KUkj1Fhl9Cnc\n".
    "dn/RsYEONbwQSjIfMPkvxF+8HQ==\n".
    "------END PRIVATE KEY------";

    将每一行用双引号""括起来,并在每行末尾添加\n。< /p>

    Antwort
    0
  • StornierenAntwort