Идентификация арендатора в конечной точке UserInfo для IdentityServer4 - PullRequest
0 голосов
/ 11 октября 2018

Мое клиентское приложение возвращает имя арендатора при перенаправлении авторизации, используя ACR_VALUES, и я могу использовать в своей реализации AuthorizeInteractionResponseGenerator для обработки специального кода, связанного с входом / согласием арендатора.После обратного вызова auth мой клиент использует конечную точку UserInfo для получения утверждений о пользователе, и одна из вещей, которые должен знать мой IProfileService - это клиент для проверки определенных утверждений.Я не смог найти способ указать Арендатора на конечную точку UserInfo и контекст. У субъекта на тот момент не было проблем с претензиями ранее в процессе входа в систему.Я заметил, что конечная точка токена будет смотреть на ACR_VALUES, но когда я делаю эти вызовы, контекст. Тема основана на вошедшем в систему пользователе, поэтому утверждение существует от более раннего, но в этом токене не возвращаются утверждения.

Есть ли что-то, чего мне не хватает в возможности определить Арендатора во время вызова UserInfo в реализации IProfileService?

1 Ответ

0 голосов
/ 26 октября 2018

После нескольких часов поиска подходящего варианта расширения в IdentityServer4, вот что я закончил.Конечная точка UserInfo по умолчанию не смотрит на значения ACR, и я не хотел создавать собственную реализацию конечной точки, поэтому я добавил заголовок к клиенту во время моего вызова в:

IHttpClientFactory factory = context.HttpContext.RequestServices.GetRequiredService<IHttpClientFactory>();
System.Net.Http.HttpClient client = factory.CreateClient();
client.DefaultRequestHeaders.Add("X-Tenant", tenant.ShortName);
UserInfoResponse userInfoResponse = await client.GetUserInfoAsync(new UserInfoRequest
{
    Address = doc.UserInfoEndpoint,
    Token = tokenResponse.AccessToken
});

Для доступа к этому значению вмой IProfileService, я внедряю службу IHttpContextAccessor и могу извлечь значение заголовка в GetProfileDataAsync:

 string tenantName = _httpContextAccessor.HttpContext.Request.Headers["X-Tenant"].SingleOrDefault();

Надеюсь, это будет полезно для кого-то другого, кто хочет внедрить проверки претензий конкретных арендаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...