【问题标题】: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)有什么问题?

标签: c# asp.net-core .net-core asp.net-core-mvc


【解决方案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; 
}

【讨论】:

    猜你喜欢
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2012-02-04
    • 2015-09-28
    • 2010-12-20
    • 2011-08-01
    相关资源
    最近更新 更多