<p>jwt トークンを取得しようとしていますが、何をしようとしても毎回エラーが発生します。私が試したことは次のとおりです。パッケージなしで jwt-token を取得しますが、jwt.io を使用して署名検証をチェックすると毎回失敗します。このパッケージを使用しているときに、<em>秘密キーを強制できません</em>、場合によっては<em>アルゴリズムが無効です</em>などのさまざまなエラーが発生しました。私が間違えたところを修正してください。 </p>
<li><strong>php-Jwt なし</strong></li>
</ul>
<pre class="brush:php;toolbar:false;">$header = [
'alg' => "RS384",
'typ' => "JWT"
];
$ペイロード = [
'iss' => '私のクライアント ID'、
'サブ' => '私のクライアントID'、
'aud' => "https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token",
'jti' => (文字列)strtotime(gmdate("Y-m-d H:i:s")),
'exp' => strtotime(gmdate("Y-m-d H:i:s")) 270,
];
$privateKey = "私の秘密鍵"
$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);
// 署名をbase64url文字列としてエンコードします
$signature_encoded = $this->base64url_encode($signature);
$jwt = $headers_encoded.'.'.$payload_encoded.'.'.$signature_encoded;</pre>
<p><strong>- php-jwt を使用</strong></p>
<ol>
<li>パッケージがインストールされました
<em>Composer には firebase/php-jwt --ignore-platform-req=ext-mongodb が必要です</em></li>
<li>コントローラで必要なファイルを使用しました</li>
</ol>
<pre class="brush:php;toolbar:false;">Firebase\JWT\JWT を使用します。
Firebase\JWT\Key を使用します;</pre>
<ol start="3">
<li>エンコードしてみます: </li>
</ol>
<pre class="brush:php;toolbar:false;">$check = JWT::encode(
$ヘッダー、
$ペイロード、
$privateKey、
「RS384」
);</pre>
<p><em>秘密キーを適用できません</em>、場合によっては<em>アルゴリズムが無効です</em>などのさまざまなエラーが表示されます。私が間違えたところを修正してください。 </p>
<p>簡単に言えば、これが私がやっていること、またはやろうとしていることです。私の代コードの一般的な形式:</p>
<pre class="brush:php;toolbar:false;"><?php
// ファイルから秘密鍵をロードします
$privateKey = file_get_contents('private.key');
// JWT のヘッダーとペイロードを設定します
$ヘッダー = [
'alg' => 「RS384」、
'typ' => 「JWT」
];
$ペイロード = [
'サブ' => '1234567890',
'名前' => 'ジョン・ドウ'、
'iat' => 1516239022
];
// ヘッダーとペイロードを JSON 文字列としてエンコードします
$headerEncoded = Base64_encode(json_encode($header));
$payloadEncoded = Base64_encode(json_encode($payload));
// ヘッダー、ペイロード、シークレットを連結して署名を作成します
$signature = hash_hmac('sha384', "$headerEncoded.$payloadEncoded", $privateKey, true);
// 署名を Base64 文字列としてエンコードします
$signatureEncoded = Base64_encode($signature);
// ヘッダー、ペイロード、署名を連結して JWT を作成します
$jwt = "$headerEncoded.$payloadEncoded.$signatureEncoded";
echo $jwt;</pre>
<p>私たちは jwt の名前を取得しましたが、https://jwt.io/ 上ではまだテストされていないことが示されています。
修正されました
各行を 二重引用符
""
で囲み、各行の末尾に\n
を追加します。