【问题标题】:How can i handle session cookie setting to then use it with NGINX auth_request?我如何处理会话 cookie 设置,然后将其与 NGINX auth_request 一起使用?
【发布时间】:2016-12-20 06:08:52
【问题描述】:

我们正在尝试实现一个简单的身份验证机制,使用 NGINX 作为代理服务器和 auth_request 来保护一些静态文件。

  • 静态文档位于 docs.mydomain.com
  • 使用电子邮件/密码生成会话令牌的 API 位于 login.otherdomain.com(它将返回带有电子邮件和会话令牌的 JSON)

当前的身份验证过程如下所示:

  1. 当用户尝试访问 docs.mydomain.com 时,他们将看到一个登录表单。在那里,他们输入他们的凭据,然后通过 AJAX 发送电子邮件/密码,API 会给我们一个会话令牌,我们将它存储在一个 cookie 中,类似这样(还注意到在 login.otherdomain.com 我有启用身份验证)。

    $("form").submit(function( event ) {
      $.ajax({
        async: false,
        url: "http://login.otherdomain.com/api/user_sessions",
        method: "POST",
        data: {
               user_sessions:
               {
                 email: $("#email").val(),
                 password: $("#password").val(),
               }
              },
        success: function(resp_hash) {
              $("form").reset() // Clearing form so email/pwd is not sent in POST request
              document.cookie = "x_api_session_id="+resp_hash.user_sessions.id;
             }
       });
     });
    
  2. 然后表单实际发送(使用 GET),您可以看到请求中清除的字段(电子邮件和密码)看起来有点难看。请求被发送到 docs.mydomain.com/docs,它将根据 login.otherdomain.com 检查会话令牌并验证它是否仍然有效,所有这些都使用 nginx auth_request (https://developers.shopware.com/blog/2015/03/02/sso-with-nginx-authrequest-module/)。像这样的:

    location /docs {
        auth_request /auth;
    }
    
    location = /auth {
        internal;
        proxy_pass $auth_api;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
        proxy_set_header X-Api-Session-Id $cookie_x_api_session_id;
    }
    

然后显示文档。我们仍然需要对错误消息进行干净的处理,但这首先是可行的。尽管如此,它仍然感觉很难看(特别是获取会话令牌的 AJAX 请求),我认为应该有更好的方法来做到这一点。关于如何改进的任何想法?我们尝试实现这一点的方式是否存在安全隐患?

【问题讨论】:

    标签: ajax session cookies nginx auth-request


    【解决方案1】:

    几天前我对访问集群中的私有服务有同样的要求,我想出了一个类似的解决方案。我在客户端用 AJAX 请求实现了一个简单的authentication server,以进行身份​​验证并获取会话令牌。

    在安全性方面,只要请求通过 HTTPS,应该一切正常。然而,我担心的是弱身份验证系统本身,它是一个简单的 LDAP 绑定操作......我决定使用 TOTP 设置一个双因素身份验证,它解决了我的大部分担忧。它对我来说足够安全,可以避免大多数攻击,或者至少在量子计算机出现之前!

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 2020-11-27
      • 2016-02-28
      • 2021-01-12
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      相关资源
      最近更新 更多