如何在 R Shiny App 中使用 LDAP 进行身份验证

Was*_*amo 5 python r ldap shiny

我的公司使用 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")
Run Code Online (Sandbox Code Playgroud)

这是我在 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: "))
                                      )
)
Run Code Online (Sandbox Code Playgroud)

我得到的是:

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

curlOptions()有一些项目相似,OPT_X_TLS_REQUIRE_CERTOPT_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 = "...."))
Run Code Online (Sandbox Code Playgroud)

Nir*_*del 0

您的 url (ldap_server) 格式不够。您尝试一下:按照此处的帖子:How do I run a ldap query using R?

ldap_server <- "ldap://company-ldap-server:636/OU=[value],dc=ad,dc=company,dc=com?cn,mail?sub?filter"
Run Code Online (Sandbox Code Playgroud)
  • 通过删除您的 OU 中的括号来替换 [值]。
  • sub 是范围(base/one/sub)作为值
  • 将“cn, mail”替换为您要查询的任何属性
  • 过滤器是搜索过滤器,生成查询的子集:例如(sn = LastName)。

查看https://docs.oracle.com/cd/E19396-01/817-7616/ldurl.html了解curl url。