我最近开始致力于保护Web应用程序安全。我正在使用Spring Framework。因此,我已经应用了JWT身份验证来保护我的REST API端点。我还创建了一个不同的示例演示,其中提供了简单的登录信息并使用Spring Security退出功能。
现在我正在尝试将JWT身份验证用于登录/注销功能,但是我觉得它有点不对劲。我认为JWT应该仅用于保护REST服务的端点,而不能用于登录/注销功能这是一个有状态的活动,而JWT身份验证不是实现此目的的最佳方法。
这是我的误解吗?JWT是否也可以用于登录/注销?对此的任何输入将不胜感激。
答案 0 :(得分:0)
嗯,您已经回答了大部分问题。
您可以进行stateful/stateless
身份验证。
现在,要使用哪一个取决于应用程序的用例。
用例1:
如果将您的应用程序部署为需要从UI执行所有执行的服务,则可以考虑状态身份验证,即基于表单的身份验证。
用例2:
让我们说您正在为第三方创建API并希望保护它们,进行无状态身份验证,即JWT
用例3:
现在,如果您的用例都是用例1,2,您还可以在一个应用程序中实现基于表单/ JWT的身份验证。
注意:
说过,您也可以将令牌身份验证用于登录。 唯一要注意的是,您必须自己编写一些方案。
例如:
登录成功后,在localStorage
中添加令牌,并将if用于其他请求。
注销后,从localStorage
删除令牌。
对于没有令牌的任何访问,均会重定向到“登录”屏幕,并显示错误消息。
答案 1 :(得分:0)
JWT(JSON Web令牌)是一种自包含的访问令牌格式。在OAuth 2.0领域中,访问令牌(例如JWT)在请求中发送到受保护的资源,并且OAuth 2.0资源服务器通过验证访问令牌并将其自检用于授权决策的权限来强制执行授权。这里的关键点是JWT用于授权NOT验证。 OpenID Connect 1.0用于验证用户。
Spring Security 5.1通过oauth2Login()
功能支持OpenID Connect 1.0以及oauth2ResourceServer()
功能的JWT。
有关完整示例,请参见OAuth 2.0 Protocols and Patterns和presentation。