我对基于令牌的身份验证有一个一般性问题。我看过多个指南似乎在说些矛盾的事情,所以我很困惑:
谁应负责创建JWT,应用程序开发人员(通过应用程序的后端服务器)或身份验证服务器(例如身份提供程序)?
(1)在[0]中,它说明开发人员需要生成+散列JWT并将其用作任何请求的承载令牌。从那里,身份验证服务器可以使用共享密钥来验证令牌。
(2)在这里[1],它表示 auth服务器生成JWT,并在提供登录名+验证后将其返回给客户端(开发者一方不涉及后端服务器)。
哪个是正确的?如果它们都正确,我怎么知道要使用哪个?
我的理解:
(1)上面的#1是开发人员在其应用程序的后端服务器中存储机密的地方。 backen充当客户端和auth服务器之间的中间人,以在不暴露密钥+访问令牌的情况下发出经过身份验证的请求。
上面的(2)#2是其中应用程序根本没有后端服务器(如Angular / React的SPA)的服务器。客户端直接与身份验证服务器进行交互(也就是不涉及任何秘密)。根据[1],IdP仅使用客户端ID,范围和其他一些东西来生成JWT。
[0] https://enable.cx.sap.com/media/1_uup99qpg(跳到1:49)
[1] https://auth0.com/blog/handling-authentication-in-react-with-context-and-hooks/(向下滚动到“向应用程序添加身份验证”下的第一个代码块,其中已配置Auth0实例)
答案 0 :(得分:1)
根据项目要求/预算/时间安排,JWT可以由开发人员创建,也可以由第三方(例如Auth0)进行管理。
这种情况涉及向第三方API发出经过身份验证的请求。
此方案使用第三方身份验证服务器对前端和后端上的路由进行身份验证/授权(两者都将利用Auth0工具)。