Невозможно получить имя пользователя / имя_файла при использовании 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

Другие вопросы по тегам