Используйте выборку с Identity Server 4
Как использовать fetch с IdentityServer4 для получения токена JWT при использовании потока паролей владельца ресурса? (что не рекомендуется в большинстве случаев).
Даже если мне нужно использовать неявный поток, я хочу использовать этот поток, потому что он более удобен в моей ситуации для моего спа-приложения. Во-первых, вы найдете здесь полезную информацию для реализации вашего решения:
Но как использовать [fetch-api] для получения токена от IdentityServer 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 Error. "Внутренняя ошибка сервера"
Если я прослеживаю заголовки HTTP с помощью fiddler, я получаю следующий результат:
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 ответ
Как я уже упоминал в моем предыдущем комментарии: если вы хотите использовать Fetch для отправки авторизованного запроса с данными формы, вы не должны указывать тип содержимого в заголовке. поскольку fetch
автоматически заполнит его правильным значением ("multipart/form-data") и добавит динамически сгенерированную границу содержимого. Также обратите внимание, что вы можете использовать URLSearchParams, если предпочитаете использовать метод содержимого типа application/x-www-form-urlencoded.