首页 > 解决方案 > 如何在 R Shiny App 中使用 LDAP 进行身份验证

问题描述

我的公司使用 LDAP 服务器针对 Active Directory 进行身份验证。我需要使用它对远程托管的 Shiny 应用程序的用户进行身份验证。我设法在 Python 中进行了身份验证,但需要将其移植到 R:

import ldap
from getpass import getpass
username = "user_name"
password = getpass(prompt='Password: ', stream=None)
ldap_server = "ldap://company-ldap-server:636"

try:
    # Create connection with LDAP server and set options
    conn = ldap.initialize(ldap_server)
    conn.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    conn.set_option(ldap.OPT_X_TLS_NEWCTX, 0)

    # Authenticate by trying to connect
    conn.simple_bind_s(username, password)

    # Retrieve this user's name and email (for authorization)
    info = conn.search_s("DC=ad,DC=company,DC=com", ldap.SCOPE_SUBTREE, f"cn={username}*")
    conn.unbind_s()

except Exception:
    print("ERROR: Could not connect")

这是我在 R 中尝试过的:

library(RCurl)

ldap_server <- "ldap://company-ldap-server:636"
user <- "user_name"
RCurl::getURL(ldap_server, .opts=list(userpwd = paste0(user, "@ad.company.com:", 
                                                       .rs.askForPassword("Password: "))
                                      )
)

我得到的是:

函数错误(类型、msg、asError = TRUE):LDAP 本地:绑定 ldap_result 无法联系 LDAP 服务器

其中curlOptions()有一些类似于OPT_X_TLS_REQUIRE_CERTand的项目OPT_X_TLS_NEWCTX,但curlSetOpts其中任何一个名称似乎都不起作用。

这个问题和答案很接近,但我想通过安全地传递用户名和密码来验证用户。

在这个答案中,他们试图将 Shiny LDAP 转换为烧瓶(基本上与我的相反)。但我不确定他们在哪里/如何指定该auth_active_dir配置......也许是 R Studio Connect 或 Shiny Open Server Pro。这两个都不是我的选择。

可能是服务器目前已关闭。与此同时,这些是等价的还是我在 R 代码中遗漏了什么?

# Python
conn = ldap.initialize(ldap_server)
conn.simple_bind_s(username, password)

# R
getURL(ldap_server, .opts=list(userpwd = "...."))

标签: pythonrshinyldap

解决方案


推荐阅读