嗨,我已经在.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进行验证?
答案 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对象。。