如何连接到使用LDAP进行身份验证的HTTP Rest API

时间:2016-02-03 19:12:50

标签: ruby http authentication active-directory ldap

我正在编写一个Ruby脚本来连接到REST API网站。 通过使用AD凭据使用LDAP / SSO对网站进行身份验证,因此不必提供基本身份验证或用户/密码。

这是到目前为止的代码:

Net::HTTPUnauthorized 401 Authorization Required

但我收到授权错误:

ldap = Net::LDAP.new
ldap.host = "ldap.company.com"
ldap.port = "389"
ldap.auth "user@company.com", "password"
ldap.bind

使用Net :: LDAP,我可以在计算机上验证我的凭据:

DLL.h
    #ifdef DLL_EXPORTS
    #define DLL_API __declspec(dllexport)
    #else
    #define DLL_API __declspec(dllimport)
    #endif

    DLL_API int test(void);

DLL.cpp
    #include "DLL.h"
    // This is an example of an exported function.
    DLL_API int test(void)
    {
        return 42;
    }

但我不知道如何在HTTP请求中“附加”或传递此LDAP信息。

我的所有Google搜索都指向我在网站应用上启用SSO /身份验证,但我不想这样做,我想将我的Ruby脚本连接到现有的LDAP身份验证网站。

更新#1 一些Ruby论坛指向我的gem HTTPI并使用'curb'适配器。此适配器依赖于Curl库来处理Kerberos / SPNEGO身份验证。 但是,我无法使curb安装程序使用他们在其网站上链接的curl库(对于Windows计算机)。

我使用kerberos模块将代码移动到Python。我能够生成故障单并将其附加到HTTP请求标头上,该标头由REST API进行身份验证并返回我想要的数据。

我还在学习,所以即使我的代码适用于Python,我也希望能够在Ruby上运行。

Python中的示例代码: http://commons.apache.org/sandbox/commons-performance/

3 个答案:

答案 0 :(得分:0)

您可以通过多种方式通过HTTP传递凭据。如果REST API允许您传递LDAP服务器的主机/端口信息(这可能是一个巨大的安全漏洞),我会感到惊讶。最可能的情况是您需要以REST API期望的形式提供用户名和密码。然后,REST API将对LDAP服务器执行身份验证,并根据身份验证结果,您将从REST API返回相应的响应/状态。

简而言之,您需要从REST API管理员(或API文档)获取信息,以了解您希望如何通过HTTP进行身份验证。

我希望这会有所帮助。

答案 1 :(得分:0)

获得401 Authorization required后,服务器还必须提供www-authenticate - 标头,其中包含有关如何进行身份验证的详细信息。查看并查看给出的信息。

答案 2 :(得分:0)

我不知道这是否有帮助,我尝试使用邮递员针对使用LDAP的API发送身份验证。 与我合作的枪支开发人员之一帮助了我,结果我不得不在用户名字段中使用DOMAIN \ username。在那之后工作了。