0

リソース所有者のパスワードフローを使用する場合、fetch with IdentityServer4を使用してJWTトークンを取得する方法を教えてください。 (ほとんどの場合は推奨されません)。Identity Server 4でfetchを使用する

暗黙のフローを使用する必要がある場合でも、私のスパアプリケーションでは私の状況ではより利便性が高いので、このフローを使用したいと思います。 、あなたはあなたのソリューションを実装するためにここに役に立つ情報を最初に見つけることができます:

しかし、どのようにトークンを取得するには、[フェッチ-API]を使用する方法アイデンティティサーバー4?

const form = new FormData(); 
    form.append('grant_type', 'password'); 
    form.append('username', username); 
    form.append('password', password); 
    if (this._settings.scope) { 
     form.append('scope', this._settings.scope); 
    } 
    form.append('client_id', this._settings.clientId); 
    if (this._settings.clientSecret) { 
     form.append('client_secret', this._settings.clientSecret); 
    } 

    var options = { 
     method: 'POST', 
     headers: { 
      'Content-Type': 'multipart/form-data' 
     }, 
     rejectUnauthorized: false, // when use local unverified certificate 
     body: form 
    }; 

応答でJWTトークンを受け取る必要がありますが、http 500エラーが表示されます。 「内部サーバーエラー」

私はシオマネキとHTTPヘッダをトレースした場合、私は以下の結果を得た:

POST http://127.0.0.1:8888/ HTTP/1.1 
content-type: multipart/form-data 
accept-encoding: gzip,deflate 
user-agent: node-fetch/1.0 (+https://github.com/bitinn/node-fetch) 
connection: close 
accept: */* 
content-length: 896 
Host: 127.0.0.1:8888 
+1

identityserverログには何が表示されますか? – cheesemacfly

+0

'DBUG:IdentityServer4.Validation.PostBodySecretParser [0]ポスト体 クリティカルで秘密のための解析を開始 :IdentityServer4.Hosting.IdentityServerMiddlewareを[0] 未処理の例外:System.IO.InvalidDataException:** コンテンツタイプの境界がありません。 ** Microsoft.AspNetCore.Http.Features.FormFeature.GetBoundary(MediaTypeHeaderValueのcontentType、のInt32 lengthLimit)Microsoft.AspNetCore.Http.Features.FormFeatureで ました。 d__18.MoveNext() ---例外がスローされた前の場所からのスタックトレースの終了--- – Armand

+0

"content-type"をヘッダから削除すると、動作します。 私は後で答えを出すが、このコードは要求jsモジュールで動作するコピー/ペーストに由来することに注意してください。 (渡されたcontent-typeを上書きする要求) – Armand

答えて

0

私は私の以前のコメントで述べたように:あなたは、許可POSTするためにFetchを使用したい場合フォームデータを要求する場合は、ヘッダーにcontent-typeを指定しないでください。 fetchは自動的に正しい値( "multipart/form-data")を入力し、動的に生成されたコンテンツ境界を追加します。 application/x-www-form-urlencodedコンテンツタイプメソッドを使用する場合は、URLSearchParamsを使用することもできます。

関連する問題