需要注销时可以使用基本身份验证的替代方法吗?

时间:2018-07-14 17:00:47

标签: java http authentication basic-authentication http-authentication

如果未构建BASIC身份验证来处理注销,那么存在哪些替代身份验证方法来对需要能够注销的后端服务进行身份验证?

  

我发现这些引用表明BASIC auth无法执行日志   毫无瑕疵地退出:

     

How to log out user from web site using BASIC authentication?

     

How do I log out?

我们正在使用BASIC身份验证登录后端应用程序,并使用FORM身份验证进行前端应用程序。在我们的团队在FireFox / IE上测试了堆栈之后,发现用户如果通过这些浏览器上的BASIC身份验证登录到后端服务,将无法注销。我的团队无法接受这些骇客和解决方法(要求用户输入不正确的凭据,关闭用户的浏览器,使用javascript发送不正确的凭据,要求用户清除浏览器缓存等),因此我们正在寻求有关替代身份验证方法的建议允许注销

编辑-我的临时注销方法:

我目前正在通过使用FORM身份验证解决此问题。一个问题是我的后端服务依赖于共享的前端login.html表单,另一个问题是Postman不支持通过重定向的FORM输入进行登录,并且我们的客户Arquillian呼叫从登录表单中爆炸了。

FORM身份验证摆脱了“我无法使用BASIC登出”问题,但是现在我无法直接进行身份验证。

2 个答案:

答案 0 :(得分:2)

基于表单的身份验证

如果可以将会话状态保留在服务器上,则可以进行基于表单的身份验证

以格式发送凭据,如果凭据有效,则服务器将发出cookie,该cookie将来回发送以标识服务器上的会话。要注销,可以使会话无效:

session.invalidate();

您还可以将应用程序配置为由于超时而使会话过期:

<session-config>
    <session-timeout>60</session-timeout> <!-- minutes -->
</session-config>

基于令牌的身份验证

如果您要使用无状态机制,请进行基于令牌的身份验证。

客户端将硬凭证(例如用户名和密码)交换为一条称为令牌的数据。对于每个请求,客户端将发送令牌到服务器以执行身份验证和授权,而不是发送硬凭证。

对于令牌,可以使用JSON Web Token(JWT)。这是一个开放标准,它定义了一种紧凑且自成体系的方式,用于在各方之间作为JSON对象安全地传输信息。

JWT是以下令牌类型的通用名称

  • JSON Web Signature(JWS):对有效负载进行了编码和签名,以便可以验证声明的完整性

  • JSON Web Encryption(JWE):它们的有效负载已加密,因此声明被其他方隐藏了

JWT, JWS and JWE
图像是从此page中提取的。

令牌可以在exp声明中定义到期日期。要注销,您可以从客户端删除令牌。

您还可以在服务器端的白名单中跟踪令牌,并根据需要使它们无效。不过,无需将整个令牌存储在服务器端:仅将令牌标识符存储在白名单中,并使用jti声明将令牌标识符存储在令牌中。

答案 1 :(得分:0)

我建议您看看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