【发布时间】:2020-07-12 04:02:29
【问题描述】:
我有一个使用 .NET 核心 3.1 版的项目,我正在使用令牌进行登录。使用 Postman 进行测试时一切正常,它创建了令牌,我可以使用它来访问主页。
问题是,当我开始在客户端进行测试时,它不起作用。我登录后调试看到,生成了token,但是因为[Authorize]属性,我无法访问HomeController。
这是我生成令牌的代码:
public async Task<HttpResponse<LoginResult>> GetTokenAsync(LoginRequest loginInfo)
{
var audience = await _audiences.FindAsync(a => a.Id == loginInfo.ClientId);
string message = string.Empty;
if (audience != null)
{
bool audienceIsValid = _jwtProvider.ValidateAudience(audience.Issuer
, audience.SecretKey
, ref message);
if (audienceIsValid)
return await GenerateToken(loginInfo);
else
message = ErrorMessages.Login_AudienceInvalid;
}
else
message = string.Format(ErrorMessages.Login_Not_Permitted, "Your client Id");
return HttpResponse<LoginResult>.Error(message, HttpStatusCode.BadRequest);
}
我猜该令牌无法正确存储。
我错过了什么?
更新 这是我的登录代码
[HttpPost]
[Route("login")]
[AllowAnonymous]
public async Task<ActionResult> Login([FromForm]LoginRequest model)
{
model.ClientId = 1;
var response = await _services.GetTokenAsync(model);
if (response.StatusCode == 200)
{
return RedirectToAction("Index", "Home");
}
return RedirectToAction("Login");
}
这就是我要访问的内容
[HttpGet]
[Route("index")]
[Authorize]
public IActionResult Index()
{
return View();
}
【问题讨论】:
-
所提供的代码都不能帮助确定令牌正确存储的原因。您是否将其正确传递到后端?
-
似乎您已经显示了生成令牌的服务器代码。但是,您如何将其存储在客户端?您必须像 Postman 测试那样获取令牌并为每个服务调用提供它
-
@oleksa 似乎我没有获得令牌并将其发送到任何地方,因此我无法存储也无法使用它。你对此有什么方向吗?我只是 .NET core 的新成员,所以我不知道如何为每个需要它的函数提供令牌。谢谢。
-
@Mickers 不知道有没有传到后端,也许没有,你有没有指点,我真的不知道怎么做,谢谢.
-
通常您将令牌存储在前端的会话或本地存储中,然后在每个后续 API 调用中将其传递到标头中,例如
token ${token}。
标签: c# asp.net-core jwt token access-token