Невозможно получить имя пользователя / имя_файла при использовании angular-oauth2-oidc и Identity Server 4
Я следую примеру Implicit Workflow из документации angular-oauth2-oidc.
В моем приложении Angular все работает хорошо, и я могу войти (во время которого я перенаправлен на Identity Server), получить свой токен и использовать этот токен для доступа к моему веб-интерфейсу.
Тем не менее, я заметил, что утверждение "указанное имя" является нулевым, и, следовательно, имя пользователя не отображается на странице входа в систему. В частности, следующий метод из примера кода возвращает null:
public get name() {
let claims = this.oauthService.getIdentityClaims();
if (!claims) return null;
return claims.given_name;
}
Я подумал, что это может быть проблема с разрешениями, но моя область действия установлена на:
scope: 'openid profile email api1',
Любая идея, что мне нужно изменить, чтобы получить эту претензию "указанное имя"?
4 ответа
Для тех, кто сталкивался с такой же проблемой. Вы можете исправить это, добавив эту строку AlwaysIncludeuserClaimsInIdToken=true
в настройках клиента.
OauthService.getIdentityClaims()
это обещание и держится
UserInfo
вы можете извлечь поле имени с помощью фигурных скобок, поэтому ваша функция должна быть:
public get name() {
let claims = this.oauthService.getIdentityClaims();
if (!claims) return null;
return claims['name'];
}
Ответ, помеченный как "Лучший ответ", неверен. Получение утверждений пользователей в idtoken приведет к тому, что idtoken будет очень большим, и тогда вы можете превысить ограничение на размер.
Правильная реализация - использовать конечную точку UserInfo, а затем использовать метод loadUserProfile:
Пример:
getUserClaims() {
const user = this.oauthService.loadUserProfile();
console.log(user, user);
}
У меня была та же проблема, в моем случае с ошибкой, отображаемой в консоли браузера, в которой говорилось, что запрос был заблокирован политикой безопасности. даже имея метод AllowAnyOrigin(), вызываемый при запуске, мне не хватило разрешения на заголовок. Поэтому, когда в моем angular aap я вызываю метод loadUserProfile через событие token_received, он отправляет некоторые заголовки, которые не были разрешены. Наконец, это исправит мою проблему:app.UseCors(options => options.AllowAnyOrigin().AllowAnyHeader()); Не забудьте позвонить перед usemvc