【问题标题】:Mobile authentication using QR in web application在 Web 应用程序中使用 QR 进行移动身份验证
【发布时间】:2018-12-28 14:08:13
【问题描述】:

我怀疑下一个技术解决方案的正确架构应该是什么。 我需要通过读取 QR 码在移动应用程序中对用户进行身份验证,该用户之前在 Web 应用程序中进行了身份验证。

该用例包括用户使用位于 Intranet 中的 Web 应用程序,但需要能够从将连接到 Internet 的移动设备上传图像。 移动应用程序将使用通过 API 网关在互联网上公开的公共 API。 API 网关将连接到后端以上传图像。 作为要求,当用户需要使用移动设备拍摄和上传图像时,他们不应再次进行身份验证,因为他们在 Web 应用程序中有一个打开的会话,只需使用 QR 码对设备进行身份验证。从逻辑上讲,QR 不会使用用户的凭据。

我的想法是使用 Oauth 2.0 和以下流程来验证移动设备:

  1. Web 应用程序请求 API Gateway 生成授权令牌,并以 UUID 进行响应。
  2. Web 应用程序将使用从 API 网关接收到的 QR 显示授权令牌。
  3. 移动设备将读取 QR,并使用授权令牌向 API 网关请求访问令牌。
  4. API 网关验证授权令牌并生成返回给移动设备的访问令牌。
  5. 移动设备使用访问令牌调用公共 API(API 网关)。

我的问题是它是否是正确的方案,还是有另一种标准的解决方案。

谢谢!!

【问题讨论】:

    标签: java android security authentication oauth-2.0


    【解决方案1】:

    考虑到您可以将新生成的授权令牌从已授权的设备直接传输到另一个设备(通过相机读取的 QR 码),您的方案将有效,但尚未达到其最大的安全潜力;这一事实会使第 3 步和第 4 步成为不必要的漏洞(这也是一个冗余,已经有一个令牌!为什么还要再找一个?);

    以下替代方案以及良好的密码术可以使后来授权的设备连接几乎不可能被入侵。想法是通过在步骤 5 中发送数据之前添加对称加密层并使用通过另一种介质交换的密钥(已授权的设备和服务器)加密的数据永远不会暴露;

    第三步替换:读取授权令牌;

    第4步替换:与服务器检查授权令牌(而不是令牌本身)的安全哈希派生,看其是否有效;

    token0=read_auth_token_from_camera()
    public_token=hash_function(token0) //the useless exposed token
    if(check_token_with_server_for_authenticity(public_token)==true)
        continue_to_step_5() //it's authorized
    else
        handle_the_scenario()
    

    第 5 步替换:使用授权令牌的另一个哈希派生加密您的请求和授权令牌,然后调用服务器 API;

    token2=another_hash_function(token0)
    request="i am top secret data"
    encryption_key=token0
    encrypted_request=encryption_function( token2 + request , encryption_key)
    send_to_server( public_token+encrypted_request)
    //notice that token2 is unknown to the intruder because its encrypted,but it is known to the server; hence the authenticity of each request can be checked by the server;
    

    如何更安全:在这种替代方式中,实际的授权令牌永远不会在服务器和新客户端之间真正交换;因此,如果入侵者可以假设破坏 SSl/TLS 层并捕获公共令牌,则入侵者将无法代表您发送任何请求或修改请求中的数据;

    【讨论】:

      【解决方案2】:

      如果此方案满足您所需的应用程序流程,那么它是正确的。如果您要进行自制身份验证,它们不是验证 android 设备的标准方法。

      我认为您需要添加的一件事是检查客户端是否实际上是您的 android 应用程序,而不是使用类似身份验证流程的任何其他应用程序。如果你能满足这一点,那就太好了。

      【讨论】:

        【解决方案3】:

        您可以使用 FireBase ML Kit 获得良好的解决方案,它还可以为您的应用执行许多基于 AI 的功能。 你可以从这里检查它: https://firebase.google.com

        【讨论】:

          猜你喜欢
          • 2014-07-10
          • 2015-11-22
          • 2017-01-10
          • 1970-01-01
          • 2017-03-03
          • 2011-06-01
          • 2022-07-31
          • 2019-02-12
          • 2012-10-24
          相关资源
          最近更新 更多