如何手动检查 json web token 是不是有效?
Posted
技术标签:
【中文标题】如何手动检查 json web token 是不是有效?【英文标题】:How to manually check whether json web token is valid?如何手动检查 json web token 是否有效? 【发布时间】:2019-02-11 12:25:01 【问题描述】:我想确定 JWT Token 在[AllowAnonymouse]]
端点中是否有效
编辑
我有一个端点,任何人(授权和未经授权的人)都可以访问,然后:如果该用户有 http 授权标头或者他在 cookie 中有令牌并且他的令牌有效,则将他重定向到 X,否则重定向到 Y
我的想法的伪代码:
[Route("Passport/")]
public IActionResult Passport()
if (this.User.Identity.IsAuthenticated)
or pseudocode:
if (tokenIsValid(getJWTTokenFromHeader()));
return RedirectToAction("Resources");
else
return RedirectToAction("Login");
我想过这样的事情:
[Route("Passport/")]
public IActionResult Passport()
var token = ExtractTokenFromHeader();
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue
("application/json"));
client.DefaultRequestHeaders.Add("Authorization", $"Bearer token");
var get = client.GetAsync($"http://localhost/verifyToken").Result;
var responseBody = await get.Content.ReadAsStringAsync().ConfigureAwait(false);
switch (get.StatusCode)
case HttpStatusCode.Unauthorized:
return RedirectToAction("Login");
case HttpStatusCode.OK:
return RedirectToAction("Resources");
default:
return RedirectToAction(...);
端点 verifyToken 有一个 [Authorize]
属性并且只返回 Unauthorized(默认)或 OK(来自代码)
【问题讨论】:
您能否详细说明,您的问题不清楚 我有一个端点,任何人(授权和未经授权的人)都可以访问,然后:如果该用户有 http 授权标头或者他在 cookie 中有令牌并且他的令牌有效,则将他重定向到 X 否则到Y 使用策略而不是在控制器方法中检查令牌:docs.microsoft.com/en-us/aspnet/core/security/authorization/… @aguafrommars 听起来不错,但我仍然需要确定令牌在HandleRequirement
中是否有效?
那么只使用if (this.User.Identity.IsAuthenticated)
有什么问题?
【参考方案1】:
你可以试试下面的代码
private static bool ValidateJWTToken(string token, out string username)
username = null;
var simplePrinciple = JwtManager.GetPrincipal(token);
var identity = simplePrinciple.Identity as ClaimsIdentity;
if (identity == null) return false;
if (!identity.IsAuthenticated) return false;
【讨论】:
以上是关于如何手动检查 json web token 是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章
Json Web Token (JWT) 究竟是如何减少人在循环攻击的?
JSON Web Token 仅适用于具有 Eloquent 模型的 Laravel
JSON Web Token Auth Service - 检查单独服务器上的状态以保护路由。节点JS
json web based token在服务器端的验证流程