#asp.net-core #identityserver4
Вопрос:
У меня есть клиент сервера идентификации, настроенный таким образом, чтобы иметь возможность использовать предоставленные пароль и код авторизации, я могу использовать и то, и другое, но при просмотре токенов они не содержат одинаковых утверждений, так ли это должно работать, или мне не хватает какой-то конфигурации?
Если это так работает (разные утверждения в каждом гранте), при использовании предоставления пароля следует ли мне использовать службу профилей для добавления других утверждений?
Комментарии:
1. Вы реализовали
IResourceOwnerPasswordValidator
себя?2. Нет, я еще не реализовал.
3. Вы должны и заполните claimsprincipal утверждениями, которые вам нужно отправить (или введите ProfileService и позвольте ему заполнить утверждения для вас). В противном случае по умолчанию отправляется только
sub
запрос IIRC. github.com/DuendeSoftware/IdentityServer/blob/…4. Вы используете идентификаторы с ASP.NET Основная идентичность?
5. Ези использую ASP.NET Основная идентичность с идентификаторами
Ответ №1:
Вам необходимо выполнить IResourceOwnerPasswordValidator
проверку и вернуть список необходимых вам требований. Реализация по умолчанию отправляет только sub
утверждение.
Смотрите пример реализации для ASP.NET Основная идентичность в репо сервера идентификации.
Затем измените его, чтобы отправлять дополнительные заявки. Или использовать ProfileService
для его заполнения:
public virtual async Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
{
var user = await _userManager.FindByNameAsync(context.UserName);
if (user != null)
{
var result = await _signInManager.CheckPasswordSignInAsync(user, context.Password, true);
if (result.Succeeded)
{
var sub = await _userManager.GetUserIdAsync(user);
_logger.LogInformation("Credentials validated for username: {username}", context.UserName);
// return additional claims
var claims = await _userManager.GetClaimsAsync(user);
context.Result = new GrantValidationResult(sub, AuthenticationMethods.Password, claims);
return;
}
// ... see the link above for a full implementation
}
Вы также можете создать новый ClaimsPrincipal
для заполнения результатов. GrantValidationResult
Другие параметры см. в разделе Перегрузки конструктора.