如何从JWT令牌获取数据并继续在客户端上请求它? .Net核心

时间:2019-03-24 22:10:34

标签: security authentication asp.net-core jwt asp.net-core-webapi

嗨,我已经在.Net Core 2.2中设置了一个Web Api以使用JWT进行身份验证。

我正在使用邮递员进行测试,并且能够发送

http://localhost:5000/api/account/login

{
    "Username" : "fred",
    "Password" : "123"
}

和响应

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOiIxIiwicm9sZSI6IkFkbWluaXN0cmF0b3IiLCJuYmYiOjE1NTM0NjUxMTgsImV4cCI6MTU1MzQ2NTcxOCwiaWF0IjoxNTUzNDY1MTE4fQ.YF0ztM_p9N2UMUJKYTjJHpkvtJwVymhtOy5H5g2qOSs

我的问题是,如何保持用户身份验证并在客户端上检索数据?

我在.Net 4.5中有这个小应用程序

用户登录并将用户名和密码发送到Web api并返回令牌。 我应该如何以及何时将令牌发送回APi进行验证?

2 个答案:

答案 0 :(得分:1)

当我为API使用JWT创建令牌并想在邮递员中测试使用令牌时,标头需要在令牌前加上单词“ Bearer”。因此,例如,您要检索数据(客户端),以使其具有标题 Key :授权 Value :Bearer(您的令牌)剪切的Post方法,并将您的令牌粘贴到“承载者”后面的空间。

答案 1 :(得分:0)

此流程可能会为您提供帮助。这只是一个伪代码。

用户从客户端登录。将令牌保存在本地存储中后,您将重定向到主页。

http.post("mysite.me/api/token", userCredentialsDto).subscribe(token => {
    localstorage.save(token);
    redirectTo["/home"];
});

请求转到TokenController.cs:

[HttpPost]
public string Post(UserCredentialsDto userCreds)
{
    _validationService.validate(userCreds);
    return _jwtService.CreateToken(userCreds);
}

当您转到主页或所需的任何页面时,您可以从本地存储中获取访问令牌,然后将该令牌附加到每个请求标头,然后再发送到服务器

这里要注意的是,访问令牌是对用户进行身份验证的东西,因此,只要您的访问令牌过期,您的用户就将通过身份验证。访问令牌过期后,您可以使用刷新令牌刷新令牌并继续使用您的应用。

JWT是base64编码的。您可以在客户端轻松对其进行解码。 .Net核心也将在成功通过身份验证后自动将JWT声明绑定到HttpContext.User对象。