ASP .NET CORE 2.2 JWT и проверка подлинности на основе идентификационных данных для веб-сайта - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть .net core 2.2 api, который генерирует (при успешном входе в систему) токен JWT, который содержит идентификатор утверждений, который передает такую ​​информацию, как имя пользователя, разрешения и роли аутентифицированного пользователя.

В моем ядре .net 2.2. веб-приложение У меня есть механизм входа в систему, который извлекает токен JWT через пользователя контроллера.

Мой вопрос.

Как я могу расширить токен из моего контроллера входа и настроить мое веб-приложение так, чтобы оно включало использование механизмов аутентификации, таких как User.Identity.IsAuthenticated, User.IsInRole("Admin"), и действий контроллера, таких как [Authorize] и [Authorize(Roles="Admin")]

Меня направили на просмотр исходного кода сторонних поставщиков аутентификации, таких как facebook / google, но безрезультатно.

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

1 Ответ

3 голосов
/ 12 апреля 2019

Первый шаг - использовать cookie authentication в Startup.cs:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

. В методе Configure используйте метод UseAuthentication для вызова промежуточного программного обеспечения аутентификации, которое устанавливает свойство HttpContext.User.,Вызовите метод UseAuthentication перед вызовом UseMvcWithDefaultRoute или UseMvc:

app.UseAuthentication();

Затем в контроллере аутентификации после получения токена и декодирования для получения утверждений вы должны создать новый ClaimsIdentity, добавить свои утвержденияи войдите в систему:

if (!User.Identity.IsAuthenticated)
{
    var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme, ClaimTypes.Name, ClaimTypes.Role);
    identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, YourName));
    identity.AddClaim(new Claim(ClaimTypes.Name, YourName));
    identity.AddClaim(new Claim(ClaimTypes.Role, "Admin"));

    //Add your custom claims

    var principal = new ClaimsPrincipal(identity);
    await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, new AuthenticationProperties { IsPersistent = true });

}

После этого вы можете использовать User.Identity.IsAuthenticated, User.IsInRole("Admin") и [Authorize(Roles="Admin")]:

[Authorize(Roles = "Admin")]
public IActionResult About()
{
    var result = User.IsInRole("Admin");
    return View();
}
...