实施延迟身份验证的安全方法

时间:2018-08-14 17:43:35

标签: api security authentication authorization jwt

我正在实现一个系统,用户可以在其中通过第三方系统调用授权。身份验证可能需要很长时间才能完成。发生的情况是,用户必须在手机上打开一个应用程序,然后输入代码。

从API角度来看,现在的流程如下:

请求:

  

POST /登录

     

body:{“ user”:“ alice”}

响应:(10-20秒后)

  

body:{“ status”:“ success”,“ token”:“ valid.jwt.token”}

问题是,前端客户端必须保持连接打开很长时间,这对我来说似乎是一种反模式。连接将打开10-20秒。

我想做的就是改变其工作方式,而改为这样:

请求:

  

POST /登录

     

body:{“ user”:“ alice”}

响应:(立即)

  

body:{“ uuid”:“ auth_request_id”,}

然后,用户将轮询GET / auth / {auth_request_id}端点,该端点将以身份验证的CURRENT状态进行响应。

例如,这就是用户打开电话身份验证应用程序之前响应的样子。

回复:

  

GET / auth / {auth_request_id}

     

body:{“就绪”:false,“状态”:“ user_opened_app”}

这是他们成功完成电话流程后的结果:

回复:

  

GET / auth / {auth_request_id}

     

body:{“ ready”:true,“ state”:“ finished”,“ token”:   “ valid.jwt”令牌“}

我在线研究了该主题,并遇到了OAuth 2和所有其他标准,但它们不适合我的用例。

原因是用户将停留在登录表单所在的页面上,并且根本不执行任何重定向。然后,他将打开另一台设备(手机),在该设备上执行2因子验证。

我想向用户动态显示其授权状态。例如,如果用户尚未打开该应用程序,我想告诉他这样做。此外,我想通过摆脱持久的HTTPS连接来提高登录系统的弹性。使用此轮询解决方案,如果一台api服务器出现故障,另一台api服务器将响应并根据请求UUID接管。

我唯一的问题是知道这样的设置是否安全。我知道,如果有人偷了uuid的uuid并开始轮询GET / login / {uuid}端点,那么他们从理论上可以窃取最终的JWT令牌。

我将如何设计此流程以确保安全?还是该设计可安全进行身份验证?

最后,如果有人窃取了您的Cookie或JWT,无论如何他们都会拥有您的身份验证详细信息-因此也许无法防止这种情况。

注意:假设流量总是通过HTTPS发生,因此网络数据包捕获不会窃取UUID。

0 个答案:

没有答案