Я работаю над веб-приложением 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.
Заранее спасибо.
Покажите нам код, в котором вы создаете authToken,
Вы можете использовать такой подход: stackoverflow.com/questions/39125347/…. Надеюсь, это поможет.
johnny 5, я отредактировал свой вопрос, чтобы включить логику из моего API. Проблема, с которой я столкнулся, заключается в клиенте.
Какой клиент вы используете, mvc, raozr page или angular?
Карни, мой клиент использует MVC.
Где взять жетон? Токен будет назначен
User
, когда пользователь получит доступ к разрешенному действию?