Json Web令牌+用户身份验证

时间:2016-07-26 23:32:36

标签: api authentication jwt

我刚刚在我的api中实现了Json Web Tokens,但我不明白如何验证创建令牌的用户是否是发出请求的用户。

例如,我有/ user / login端点,我收到了登录用户和密码。然后我创建一个包含用户数据的json web令牌,并将其返回。这是我的问题,我怎么知道创建该令牌的用户是发出请求的用户?

我找到了几种方法来验证这一点,例如保存用户的user-agent + ip,如果user-agent + ip是xxx,则只接受对该令牌的请求,但我不确定这是最好的方式。

我希望你能帮我提一些建议,

全部谢谢

2 个答案:

答案 0 :(得分:1)

  

我如何知道创建该令牌的用户是发出请求的用户?

由于JWT包含用户ID并已签名,因此将检测对内容的任何更改。拥有令牌是真实性的证据

使用JWT发布和验证的过程或多或少与此类似

发布新的JWT

  1. 用户使用凭据执行和身份验证

  2. 服务器验证凭据,生成包含用户数据的JWT有效负载以及某些字段(如到期时间或颁发者),并使用服务器私钥对令牌进行签名

  3. 客户端收到令牌并将其存储(在安全存储中)。

  4. <强>验证

    1. 用户向服务器发送请求。该请求包括JWT,通常在标题中或作为url param

    2. 服务器使用密钥验证签名,并提取用户ID以了解请求者。如果签名无效,则拒绝请求

答案 1 :(得分:0)

你有什么理由不能使用像OAUTH2这样的标准让大男孩为你处理安全问题吗?滚动自己的安全通常很难得到正确,几乎所有主要玩家都提供免费的OATH支持。

那就是说,我会犹豫要不要让你走上一条糟糕的道路,但是如果你必须保持自己的安全感,那么我之前就已经在你的脚下了,确保你完全阅读了OWASP提供的所有内容。他们提供非常详细的威胁分析,并提供在您的旅程中非常宝贵的建议。

OWASP Threat Analysis

编辑1

良好的轻量级和易于实施的标准是OpenID,正如他们的旗帜所解释的那样,

  

OAuth 2.0顶部的简单身份层

请在此处查看有关其工作原理的详细说明: OpenID-Wiki