authentication - Nginx 配置 : how to use auth_basic authentication if ssl_client_certificate none provided?

标签 authentication drupal nginx config

我正在尝试按如下方式设置 Nginx 服务器:

首先,服务器应该检查用户是否提供了客户端 SSL 证书(通过 ssl_client_certificate )。
如果提供了 SSL 证书,则授予对站点的访问权限,

如果未提供 SSL 证书,则要求用户输入密码并通过 登录。 auth_basic .

我能够同时配置两种身份验证方法。但是这个配置是多余的。

为了检查用户是否提供了它的 SSL 证书,我尝试这样的配置:

18:    if ($ssl_client_verify != SUCCESS) {
19:        auth_basic "Please login";
20:        auth_basic_user_file .passfile;
21:    }

但是 Nginx 返回一个错误:

"auth_basic" directive is not allowed here in .../ssl.conf:19



在这种情况下如何设置条件?

最佳答案

您可以设置 auth_basic if中的配置像这样的条款:

server {
    listen 443;
    auth_basic_user_file    .htpasswd;
    ssl_client_certificate  ca.cert;
    ssl_verify_client       optional;
    ...

    location / {
      ...

      if ($ssl_client_verify = SUCCESS) {
        set $auth_basic off;
      }
      if ($ssl_client_verify != SUCCESS) {
        set $auth_basic Restricted;
      }

      auth_basic $auth_basic;
    }
}

现在,如果未提供客户端证书(或验证失败),身份验证将回退到 HTTP Basic。

关于authentication - Nginx 配置 : how to use auth_basic authentication if ssl_client_certificate none provided?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23716588/

相关文章:

Nginx:(111:连接被拒绝)同时连接到上游

python - Django:我可以重定向点击/admin/的未经身份验证的用户吗

.net - Authbot 登录服务返回链接,显示 "ClientID not supported for this API"

javascript - Drupal Nice Menus 下拉菜单被下面的内容隐藏了

azure - Azure 应用服务上的 Drupal 9 文件存储

angularjs - 如何判断 Web 应用程序是否是使用 Angular(或其他技术)构建的?

macos - 解锁 Osx Local Items 钥匙串(keychain)

authentication - 如何创建单点登录体验?

javascript - ajax uploader (使用nginx)

amazon-web-services - AWS - 在考虑性能的情况下提供静态文件