Как использовать файлы cookie с JWT в веб-приложении Net Core? - PullRequest
0 голосов
/ 16 мая 2019

Я занимаюсь разработкой веб-приложения Net Core 3.0 И веб-API Net Core 3.0.Веб-API имеет атрибут [Authorize] на всех конечных точках, кроме login, и отправляет мне JWT при успешном входе в систему.НО, я не понимал, как сохранить его в моем веб-приложении и использовать его для запроса чего-либо к моему API.

То, что я сейчас делаю в своем веб-приложении, выглядит следующим образом:

public async Task<ClaimsPrincipal> Login(LoginViewModel model)
{
    var response = await Client.PostAsJsonAsync("user/login", model);
    // Client is HttpClient
    try
    {
        response.EnsureSuccessStatusCode();

        var token = await response.Content.ReadAsAsync<JsonWebToken>();
        if (!token.Success)
            return null;
        var claims = new List<Claim>
                     {
                         new Claim(ClaimTypes.Email, token.Email),
                         ...
                     };

        // What do I Have to do with token.Token?
        var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
        var principal = new ClaimsPrincipal(identity);

        return principal;
    }
    catch (Exception e)
    {
        Debug.WriteLine(e);
        return null;
    }
}

тогда мой [HttpPost] метод при входе в систему (/ User / Login) делает следующее:

var response = await Login(model)
await HttpContext.SignInAsync(response);

и мой Startup.cs

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(o => o.LoginPath = "/User/Login");

с

app.UseAuthentication();

in Configure

Так что теперь я могу войти в систему, SignOut с помощью файлов cookie, но я не знаю, как сохранить / использовать JWT для вызова моего API.Как я могу указать токен для моего клиента?

Пример кода был бы очень полезен.

1 Ответ

0 голосов
/ 16 мая 2019

Если вы используете ASP.NET Core API и ваш Frontend является Angular / React / и т.д., вы можете сохранить токен JWT в локальном хранилище или в хранилище сеанса и включить его в каждый запрос ajax к API.

...