spa中基于令牌的身份验证(反应)

时间:2018-09-16 07:10:04

标签: reactjs authentication jwt single-page-application

我意识到spa(react)不支持刷新令牌。 因为它无法保护它。

所以我遇到了一系列问题:

1-我们可以在spa中使用长时间访问令牌吗?安全吗?

2-刷新令牌是替代解决方案吗?

3-我们应该使用第三方身份服务器(例如Identityserver 4)还是可以实现令牌生成(自身)。什么是最佳做法?

1 个答案:

答案 0 :(得分:0)

有点晚,但仍然...

您认为正确的刷新令牌不应由用于验证SPA应用程序中的用户身份的隐式授予返回。是的,该限制是由于浏览器无法将其设为私有。

  

1-我们可以在spa中使用长时间访问令牌吗?安全吗?

我们可以,但是它是否安全取决于您应用程序的安全策略。 为了简短起见,here是如何考虑为各种安全要求指定访问令牌生存期的示例。

  

2-刷新令牌是替代解决方案吗?

是的,它被称为 Silent身份验证,并且简短地看起来像这样:

  • 客户端(SPA应用)获取访问令牌和 expires_in 参数
  • Identity Server提供了身份验证会话(cookie),因此该应用可以在不提供凭据的情况下请求新令牌,因为它已在Identity Server上进行了身份验证
  • 如果会话的滑动期满,则客户端ping Identity Server以使会话在需要的时间内保持活动状态
  • 一旦Acces令牌到期并且auth会话仍处于活动状态(可能需要检查),客户端就会请求另一个访问令牌(通常在setTimeout中完成),但是在这种情况下,需要提供一个参数告诉Identity Server应该删除同意屏幕(通常是prompt=none

资源:

Azure AD Silent authentication

Auth0 Silent authentication

  

3-我们应该使用第三方身份服务器(例如Identityserver 4)还是可以实现令牌生成(自身)。什么是最好的   练习吗?

这取决于应用程序的大小以及您是否仅需要令牌生成还是更多(例如,现成的联合身份验证,各种授权类型等)。 对于大型企业(如果不需要重新发明轮子),除非您的应用程序很小(MVP,否则,最好使用生产就绪的第三方库(Identity Server 4OpenIddict)。原型等)。

Identity Server 4需要付出一些努力才能以正确的方式对其进行配置,并且可能仅仅是多余的。 OpenIddict是更简单的选择。

自定义令牌生成是我们在Identity Server出现之前曾经做过的事情。如今,只有一个快速解决方案可以满足您的自定义身份验证需求。

值得一提的这个项目JWTSimpleServer用于简单的JWT身份验证。