Я реализовал локальный IdentityServer, используя образец Quickstart, и подключил к нему Аурелия-Опеин-Ид-Коннект. Настройка работает нормально.
У меня вопрос:
Когда я запускаю приложение Aurelia как есть, оно предоставляет мне (Претензии) имя и веб-сайт. Но когда я изменяю open-id-connect-configuration-identity-server.ts и добавляю «токен» в response_type: "id_token token"
, он не предоставляет мне мои утверждения, то есть имя и веб-сайт. Хотя теперь он предоставляет мне access_token.
Как использовать этот access_token и использовать его для доступа к веб-API после успешного входа в систему?
Пожалуйста, если кто-нибудь может поделиться своим опытом по этому поводу.
Я немного изменил второй вопрос. У меня вопрос, как я могу использовать этот токен доступа для доступа к веб-API в Aurelia. Ваш AlwaysIncludeUserClaimsInIdToken для истинного ответа правильный.
Чтобы использовать access_token
для выполнения HTTP-запросов, вам необходимо установить его в качестве токена-носителя в заголовках запросов. Это можно сделать любым удобным для вас способом, конечно, удобный способ сделать это - написать interceptor
, который будет добавлять заголовок для каждого вашего HTTP-запроса.
Вы можете сделать перехватчик, выполнив в main.ts
следующее:
import { HttpClient } from "aurelia-fetch-client";
export function configure(aurelia: Aurelia) {
// Other configuration
const httpClient = aurelia.container.get(HttpClient);
httpClient.configure((config) => {
config
.withInterceptor({
request(request) {
const token = getToken(); // Implement your preferred way to do this
if (token) {
request.headers.append("Authorization", `Bearer ${token}`);
}
return request;
}
});
});
// More configuration
}
Этот код будет добавлять access_token
, который вы получаете с помощью getToken()
, к любому HTTP-запросу, который вы делаете.
А способ получить ваш токен здесь состоит в том, чтобы сохранить токен в одноэлементном классе, который вы затем извлекаете из контейнера Aurelia так же, как вы извлекаете httpClient
:
const currentUser = aurelia.container.get(CurrentUser);
Однако это полностью зависит от ваших предпочтений.
Вы сказали, что у вас был токен доступа, когда вы изменили
response_type
наid_token token
, так что это ответ на вопрос 2. Что касается первого, скорее всего, это конфигурация вашего IdentityServer. В вашем клиенте попробуйте установитьAlwaysIncludeUserClaimsInIdToken
наtrue
.