2 回答
TA贡献1895条经验 获得超3个赞
基于表单的身份验证
如果可以将会话状态保留在服务器上,则可以进行基于表单的身份验证。
以表单的形式发送凭据,如果凭据有效,则服务器将发出cookie,该cookie将被来回发送以标识服务器上的会话。要注销,会话可以无效:
session.invalidate();
您还可以将应用程序配置为由于超时而使会话过期:
<session-config> <session-timeout>60</session-timeout> <!-- minutes --> </session-config>
基于令牌的身份验证
如果您需要无状态机制,请进行基于令牌的身份验证。
客户端将硬凭证(例如用户名和密码)交换为一条称为令牌的数据。对于每个请求,客户端将发送令牌到服务器以执行身份验证,然后授权,而不是发送硬凭证。
对于令牌,可以使用JSON Web令牌(JWT)。这是一个开放标准,它定义了一种紧凑且自成体系的方式,用于在各方之间作为JSON对象安全地传输信息。
JWT是以下标记类型的通用名称:
JSON Web签名(JWS):对有效负载进行编码和签名,以便可以验证声明的完整性。
JSON Web加密(JWE):它们的有效负载已加密,因此对其他方隐藏了声明。
令牌可以在exp
索赔中定义到期日期。要注销,您可以从客户端中删除令牌。
您还可以在服务器端的白名单中跟踪令牌,并根据需要使令牌无效。但是,无需将整个令牌存储在服务器端:仅将令牌标识符存储在白名单中,并使用jti
声明将令牌标识符存储在令牌中。
TA贡献1891条经验 获得超3个赞
我建议您看看Apache Shiro,尤其是会话的管理方式(https://shiro.apache.org/session-management.html)。他们已经抽象化了会话的概念,以便它可以在各种情况下工作:在Web应用程序中(在这种情况下,它只是HTTP会话的包装),在独立应用程序中,等等。前端可以打开和关闭与后端层共享的Shiro会话(从中注销)。
看到这句话:
异构客户端访问
(...) For example, a (desktop) application could ‘see’ and ‘share’ the same physical session. We are unaware of any framework other than Shiro that can support this
添加回答
举报