Реализовать авторизацию пользователей для веб-приложения ASP.NET Core 3.1, которое получает JWT (токен) из внешнего источника (веб-API)

Я работаю над веб-приложением ASP.NET Core 3.1, которое подключается к веб-API для проверки подлинности. Для успешного входа в систему API отправит обратно JWT (токен) с ролями пользователей и другой соответствующей информацией.

Этот код находится в моем Web API LoginController

        /// <summary>
        /// Login asynchronously
        /// </summary>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost("login")]
        public async Task<IActionResult> LoginAsync()
        {
            try
            {
                reader = new StreamReader(HttpContext.Request.Body);
                string requestFromPost = await reader.ReadToEndAsync();

                creds = JsonConvert.DeserializeObject<UserCredentials>(requestFromPost);

                var response = await authService.CreateAccessTokenAsync(creds);
                if (!response.Success)
                {
                    return BadRequest(response.Message);
                }

                var accessRscToken = new AccessTokenResource();

                accessRscToken.AccessToken = response.Token.Token;
                accessRscToken.RefreshToken = response.Token.RefreshToken.Token;
                accessRscToken.Expiration = response.Token.RefreshToken.Expiration; //expiration for refresh token
                accessRscToken.Message = "Login Successful.";
                accessRscToken.Status = HttpStatusCode.OK.ToString();
                accessRscToken.StatusCode = ((int)HttpStatusCode.OK).ToString();

                return Ok(accessRscToken);
            }
            catch (Exception ex)
            {
                //TODO: clean this up. 17/12/2020
                return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
            }
        }

Я могу получить субъект претензий после прочтения JWT, используя следующий код в моем веб-приложении (клиенте) LoginController

var handler = new JwtSecurityTokenHandler(); //create new JwtSecurityTokenHandler
var jsonToken = handler.ReadJwtToken(authToken); //read the token
var claims = jsonToken.Claims; //get the roles/claims in the token

var principal = new ClaimsPrincipal(new ClaimsIdentity(claims)); //create a ClaimsPrincipal object

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

@if (User.IsInrole("Administrator"))
{ 
  //show menu if user in administrator role
}

Как я могу получить доступ к объекту ClaimsPrincipal в представлении или передать роли объекту User.

Заранее спасибо.

Где взять жетон? Токен будет назначен User, когда пользователь получит доступ к разрешенному действию?

Karney. 30.03.2021 05:06

Покажите нам код, в котором вы создаете authToken,

johnny 5 30.03.2021 05:35

Вы можете использовать такой подход: stackoverflow.com/questions/39125347/…. Надеюсь, это поможет.

zekeriya kocairi 30.03.2021 20:45

johnny 5, я отредактировал свой вопрос, чтобы включить логику из моего API. Проблема, с которой я столкнулся, заключается в клиенте.

Onsongo Moseti 30.03.2021 23:35

Какой клиент вы используете, mvc, raozr page или angular?

Karney. 31.03.2021 04:29

Карни, мой клиент использует MVC.

Onsongo Moseti 03.04.2021 14:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
38
0

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