Security 安全性-JWT和Oauth2(刷新令牌)

Security 安全性-JWT和Oauth2(刷新令牌),security,oauth,oauth-2.0,cryptography,jwt,Security,Oauth,Oauth 2.0,Cryptography,Jwt,我有一个angular客户端应用程序和一个.NETWebAPI服务器。 我试图理解如何使用令牌以最佳方式实现安全性。 我考虑了几个选择,我不知道哪一个是最好的,或者是否有更好的方法 过期JWT 1.用户使用凭据登录->服务器返回过期的JWT(例如,从登录时间算起60分钟)。在这60分钟内向服务器发出的每个有效请求,服务器都会返回一个新的JWT令牌,新的过期时间为60分钟。若用户在60分钟内并没有发送服务器请求,他必须再次登录。 此解决方案与会话非常相似 Oauth2-我认为我没有正确理解这个协议

我有一个angular客户端应用程序和一个.NETWebAPI服务器。 我试图理解如何使用令牌以最佳方式实现安全性。 我考虑了几个选择,我不知道哪一个是最好的,或者是否有更好的方法

过期JWT

1.用户使用凭据登录->服务器返回过期的JWT(例如,从登录时间算起60分钟)。在这60分钟内向服务器发出的每个有效请求,服务器都会返回一个新的JWT令牌,新的过期时间为60分钟。若用户在60分钟内并没有发送服务器请求,他必须再次登录。 此解决方案与会话非常相似

Oauth2-我认为我没有正确理解这个协议,所以如果我说的不正确,我道歉

2.用户使用凭据登录->用户获得刷新\u令牌和访问\u令牌。 对于每个请求,客户端都会附加访问令牌。如果服务器返回401(未经授权),客户端将使用刷新令牌创建新的访问令牌,并使用新令牌重新发送失败的请求

对我来说,这个流程中的问题是,我不知道我是否因为令牌无效或用户试图访问未经授权的资源而未经授权

这让我想到了第三个解决方案

3.用户使用凭据登录->用户获得刷新令牌、访问令牌和访问令牌到期。当用户想要创建对服务器的请求时,他会检查访问令牌是否已过期。如果过期,客户端将请求一个具有新过期日期的新访问令牌,然后才执行该请求

还有两个关于auth2的小问题:

1.为什么我有刷新令牌和访问令牌?它们都存储在客户端本地存储中。为什么不始终使用刷新令牌?对于服务器来说,拥有刷新令牌和访问令牌是有意义的,因为刷新令牌是安全的

2.刷新令牌是否有过期日期? 如果有,我如何创建新的刷新令牌? 如果不是这样的话,那么让我们永远保持联系不是有点不安全吗


非常感谢您的帮助

选项3,使用凭据登录并获取访问令牌、刷新令牌和过期时间是常用的方法。 例如:

JWT访问令牌的过期时间也可以在有效负载字段exp中的令牌本身中找到,以UNIX时间戳的形式:

{
  ...
  "exp": 1500547257,
  "nbf": 1500543657
   ...
}
有了这些信息,您可以实现自己的机制来检查您的访问令牌是否仍然有效,并在必要时刷新它

刷新令牌通常也会过期。当刷新令牌过期时,您需要使用凭据重新开始

此外,您还可以阅读以下内容以了解有关该主题的更多信息:

下面是一个教程,介绍如何在Angular中处理刷新令牌:

{
  ...
  "exp": 1500547257,
  "nbf": 1500543657
   ...
}