Как получить текущего пользователя с помощью шаблона create response app -auth на net core 3 и сервере идентификации - PullRequest
0 голосов
/ 16 июня 2020

Я никогда раньше не использовал сервер идентификации, и мне было интересно, как получить информацию о текущих пользователях, если они были аутентифицированы с использованием net ядра 3.

Использование barebones create response app -auth weather app template

в WeatherForecastController у нас есть атрибут авторизации:

[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase

со следующей конечной точкой:

[HttpGet]
public IEnumerable<WeatherForecast> Get()

Что вернет правильные данные, если вы вошли в систему in и получил токен-носитель jwt.

Я хотел бы создать конечную точку, которая: 1. Разрешает анонимный доступ (вход в систему или нет, поэтому атрибут авторизации необходимо удалить или заменить) 2. Затем он должен попытаться аутентифицировать пользователя. 3.Если пользователя можно идентифицировать, конечная точка вернет правильные данные, иначе, если пользователя невозможно идентифицировать, она вернет подмножество данных.

Я изо всех сил пытаюсь получить пользователя, который сделал запрос, я считаю, что я должен использовать конечную точку GET /connect/userinfo identityserver с токеном-носителем в качестве параметра, но я понятия не имею, как это сделать . Я хотел бы получить доступ к user_id, чтобы я мог соответствовать таблице identityUser.

Я также пробовал:

var identity = (ClaimsIdentity)User.Identity;
IEnumerable<Claim> claims = identity.Claims;

Мне кажется, что есть правильный способ сделать это, что я я пропал. Буду благодарен, если кто-нибудь укажет мне верное направление.

1 Ответ

0 голосов
/ 16 июня 2020
Затем он должен попытаться аутентифицировать пользователя

Браузеры взаимодействуют с веб-приложениями. У вас должно быть веб-приложение, чтобы иметь возможность перенаправлять обратно на IDS4 для входа в систему. У вас есть API. Более поздние веб-приложения взаимодействуют с веб-API. Подробнее здесь

Если пользователя можно идентифицировать, то конечная точка вернет правильные данные, иначе, если пользователя невозможно идентифицировать, она вернет подмножество данных

То, что вы ищете, это Авторизация, вы можете вручную выполнить эту проверку на конечной точке. Вы можете получить доступ к текущему пользователю, используя ControllerBase.User ass в результате передачи действительных токенов JWT API. Учитывая, что вы уже настроили аутентификацию, используя следующий код:

services.AddAuthentication("Bearer").AddJwtBearer("Bearer",
                options =>
                {
                    options.Authority = "http://localhost:5000";
                    options.Audience = "api1";
                    options.RequireHttpsMetadata = false;
                    options.TokenValidationParameters = new TokenValidationParameters()
                    {
                        NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"//To set Identity.Name 
                    };
                });

Я изо всех сил пытаюсь получить информацию о пользователе, который сделал запрос

Вы можете просто использовать ControllerBase.User, чтобы получить текущего аутентифицированного пользователя в API, нет необходимости вызывать какую-либо конечную точку.

Обновление: Установка NameClaimType, как указано в приведенном выше коде, установит Identity.Name в качестве идентификатора пользователя.

...