验证你的api

DreamFactory最受欢迎的功能之一是广泛的验证支持。而基于API密钥身份验证是满足许多DreamFactory-powered应用程序,开发人员常常需要更高程度的安全通过特定于用户的认证。在某些情况下基本的HTTP身份验证将完成工作,然而许多企业需要更复杂的和灵活的方法主要是因为越来越多的采用单点登录(SSO)的解决方案,比如Active Directory LDAP,和使用的第三方身份提供者和解决方案,比如AWS Cognito,Auth0,Okta

你会很高兴知道DreamFactory支持所有这些选项通过一组全面的认证连接器。这些连接器包括Active Directory LDAP,通过知名OAuth身份提供商如Facebook, GitHub,和Twitter, OpenID连接,SAML 2.0。在这一章里,我们将带你通过所有的不同的身份验证集成选项在你处置!

身份验证基础

所有DreamFactory API是私人在默认情况下,要求至少一个API密匙进行身份验证。API键与基于角色的访问控制(RBAC)决定什么行动客户负责提供API键可以进行关于API。例如,可以创建一个只读RBAC,确保客户端不能访问API的插入,修改或删除端点是否存在。如果你有兴趣在保护一个数据库支持的API,你可以限制到一个特定的表,视图,存储过程。

此外,DreamFactory支持匿名和基于用户的身份验证。前者属于单独提供一个API键,意义DreamFactory不会有任何额外的信息关于用户通过客户端负责发布API调用。然而在很多情况下你会想确定连接用户要求身份验证通过身份验证提供者如Active Directory, LDAP或Okta。事实上,DreamFactory支持这些以及更多的供应商,包括:

  • 基本身份验证
  • 活动目录
  • LDAP
  • OpenID连接
  • OAuth,包括对供应商如Facebook和GitHub的支持
  • SAML 2.0

身份验证过程

无论所需的身份验证方法是匿名的或基于用户,你总是会提供一个API密匙。这个API密钥传递的请求通过X-DreamFactory-Api-Key头。DreamFactory将证实存在的关键(列出了所有的API密钥管理控制台应用程序选项卡),然后回顾相关的RBAC确认请求方法和根据RBAC定义URI是允许的。

当使用基于用户的身份验证时,DreamFactory将另外期待一个JSON Web标记(JWT)沿通过传递X-DreamFactory-Session-Token头。这JWT是由DreamFactory成功的身份验证之后对服务提供者的身份验证。下图列出了身份验证流在使用第三方身份验证提供者如活动目录:

成功地认证之后,DreamFactory将生成JWT,并将它返回给客户端。这个JWT然后应该提交每个后续请求。DreamFactory将检查标记的有效性和签名,检查相关的用户分配RBAC(基于角色的访问控制可以通过用户的每个用户分配角色选项卡),如果一切检查API调用将被处理。下图描述这一过程:

验证与HTTP基本身份验证

(节即将到来的很快)

GET / api / v2 / mysql / _table HTTP / 1.1 /员工主持人:demo.dreamfactory.com用户代理:失眠/ 6.6.0授权:基本d2pAd2pnaWxtb3JlLmNvbTpqYXNvbjEyMw = =接受:/

Azure的Active Directory OAuth身份验证

< ?php变量的美元= $ _SERVER (“QUERY_STRING”);# $ url = ' https://demo.dreamfactory.com/api/v2/user/session?创建连接oauth_callback = true”。$变量;ch = curl_init美元($ url);#设置我们的选项curl_setopt (ch美元CURLOPT_POST 1);curl_setopt ($ ch CURLOPT_RETURNTRANSFER真实);#得到响应响应美元= curl_exec (ch);curl_close (ch);var_dump (json_decode(响应)美元);

与OpenID身份验证连接

OpenID提供用户方便使用现有占签约到不同的网站。这不仅消除了需要处理多个密码,但OpenID也给用户更好地控制支持OpenID的与网站共享个人信息。OpenID已经广泛采用自2005年成立以来,公司,如谷歌,微软和Facebook提供OpenID提供者服务。此外,几个OpenID库可用于集成与这些供应商。DreamFactory的商业版本(版本2.7和更新)也支持OpenID,允许您使用OpenID-based身份验证与您的api。

配置OpenID连接

配置DreamFactory OpenID的连接器,您首先需要确定一个OpenID提供者。这个供应商管理您的用户将使用用于身份验证的凭证。对于本教程中我们将使用谷歌的OpenID实现。如果你想跟随这个特定的例子你首先需要登录Google的API控制台创建一组OAuth2凭证。登录后,使用屏幕顶部的搜索框的搜索OAuth。在出现的下拉选择凭证(见下面的截图)。

接下来,单击创建凭证下拉选择OAuth客户机ID:

接下来会提示配置屏幕你的同意。这是屏幕的用户看到当启动身份验证过程。点击配置同意屏幕,你会被提示添加或确认下列事项:

  • 应用程序类型:此OpenID集成将仅用于用户的组织,或者还组织之外的用户可以使用它来验证吗?
  • 应用程序名称:与OpenID集成相关的应用程序的名称。
  • 应用程序标识:您可以选择上传您的组织或项目同意屏幕上提示标志。
  • 支持电子邮件:一个组织的电子邮件地址,用户可以接触问题和问题。
  • 范围为Google api:这个设置决定了数据应用程序将能够代表身份验证的用户访问。我们将使用这个例子的默认作用域(电子邮件、档案和openid)。
  • 隐私政策的URL:自解释的
  • URL的服务条款:自解释的

保存这些更改之后,你将被提示有两个最后的信息:

  • 应用程序类型:您可以选择之间Web应用程序,安卓,Chrome应用程序,iOS,或其他。你在这里选择不会影响DreamFactory的行为,所以一定要选择最适合您的特定应用程序的类型。
  • 限制:这个命名字段要求你提供一个授权JavaScript起源授权重定向URL和/或一个URI。重定向的URI是至关重要的,因为它是目的地,谷歌将发送身份验证成功之后授权代码。这段代码必须由应用程序截获并转发DreamFactory完成过程和生成会话令牌(JWT)。如果你还不理解这将如何工作,我建议阅读后,回到这个配置屏幕上看到一个例子之后在这一节中。

在保存您的更改,您就可以配置DreamFactory OpenID连接器连接!

配置DreamFactory

DreamFactory认证连接器被发现在同一位置的标准API连接器。查看,登录到你的DreamFactory实例并导航到服务选项卡。选择创建,在出现的下拉选择OAuth最后OpenID连接。您将看到以下初始配置屏幕:

  • 的名字:名字将表单API URL的一部分,所以你要用小写的字符串没有空格或特殊字符。此外,通常你要选择一些你可以很容易地分辨出API的目的。例如你的谷歌OpenID身份验证连接API你可以选择一个名称等谷歌openid。记住一个小写字母数字的名字是必需的。
  • 标签:标签是用于参考目的在管理界面和系统相关的API的反应。您可以使用更简短,比如“Google OpenID API”。
  • 描述:如标签,描述用于参考目的在管理界面和系统相关的API的响应。
  • 活跃的:这决定了API是否活跃。默认情况下它将活跃但是如果你还没有准备好开始使用API或想暂时禁用它,晚些时候回到这个屏幕,切换复选框。

这些字段完成后,单击配置选项卡来完成配置。此屏幕上你会看到一个领域,包括:

  • 默认角色:DreamFactory可以自动分配一个默认角色(了解更多关于角色在这里用户成功登录后。在这里你可以识别这个角色。如果你想更有选择性地授予角色,看到每个应用程序的作用领域,介绍如下。
  • 发现文档端点:如果你的身份提供商提供了一个发现文档端点,添加在这里将是最快配置您的OpenID连接器连接的方法。这是因为这样做会自动配置的其他字段,只要求你另外提供客户机ID、客户秘密,和重定向URL。
  • 授权端点:这个端点授权访问受保护的资源,如资源所有者的身份。它将调用资源所有者的成功登录和授权请求者访问受保护的资源说。
  • 令牌端点:令牌端点联系的客户端在收到授权代码授权端点。客户端将该授权代码传递给令牌端点如果验证,令牌返回给客户端。
  • 用户信息端点:这个端点可以联系到客户端登录用户检索信息的原因的说法(名称、电子邮件等)。
  • 验证标识牌:通过检查这个领域,DreamFactory将验证ID标记通过执行任务,比如检查所使用的加密算法加密令牌匹配指定的OpenID提供者,验证令牌签名和验证令牌。
  • JWKS URI:这个确定JSON网络关键组(JWKS)的URI。JWKS包含公钥用于JWT验证集。例如谷歌这个URI定义为https://www.googleapis.com/oauth2/v3/certs
  • 作用域:作用域识别的水平限制访问请求的客户端。例如这可能是一些用户配置文件信息,如名称和电子邮件地址,或它可能会进入一个私人服务,如用户的谷歌日历。您将使用这个字段以逗号分隔格式的定义范围,如openid、电子邮件、资料
  • 客户机ID:随着客户秘密(介绍下),客户机ID形式的一部分使用的凭证对客户与身份提供者进行交互。你会获得客户机ID创建一个开发人员的账户时所需的身份提供商。
  • 客户的秘密:客户端使用秘密与客户机ID与身份验证提供者。你将收到这个秘密的客户机ID时创建一个开发人员的身份提供商的账户。
  • 重定向URL:也许比任何其他,OpenID URL重定向引起相当大的混乱中开发人员在创建一个OpenID流。这是因为一些额外的编码在应用程序中需要为了完成OpenID流。在成功的身份验证和授权代表身份提供者,这个URL将联系的一组参数的URL DreamFactory脚本必须向前。DreamFactory将最后一次联系身份提供商来验证参数,然后返回一个会话令牌(JWT)发起了转发的脚本。没有这个额外的序列为您的自定义应用程序将不可能获得JWT !不要担心,以后在这一节中,我们提供了一个示例脚本演示这个过程。
  • 每个应用程序的作用:如果通过分配毛毯的作用默认角色不需要设置,您可以使用此设置分配角色在每个应用程序的基础上。

配置这些设置后,出版社保存持续的变化。接下来,我们将通过创建一个脚本来完成配置过程负责完成OAuth的回调并生成会话令牌(JWT)

OpenID身份验证过程

记得在配置谷歌的OpenID URI设置增加了重定向:

这个端点负责拦截OAuth回调参数需要被转发到DreamFactory为了生成会话令牌。下面的示例PHP脚本,然后返回包含JWT的JSON对象和其他用户配置文件数据等的名称和电子邮件地址。这是脚本:

< ?php变量的美元= $ _SERVER (“QUERY_STRING”);# $ url = ' https://example.com/api/v2/user/session?创建连接oauth_callback = true”。$变量;ch = curl_init美元($ url);#设置我们的选项curl_setopt (ch美元CURLOPT_POST 1);curl_setopt ($ ch CURLOPT_RETURNTRANSFER真实);#得到响应响应美元= curl_exec (ch);curl_close (ch);美元$ json = json_decode(响应); var_dump($json);

这里是格式化的JSON输出:

对象(stdClass) # 1 (12) {[“session_token”] = >字符串(353)“JWT_TOKEN_HERE”(" id ") int = >(9)(“名字”)= >字符串(13)“杰森·吉尔摩”(“first_name”) = >字符串(5)“杰森”(“last_name”) = >字符串(7)“Gilmore”(“电子邮件”)= >字符串(37)“jason.gilmore + google@dreamfactory.com”(“is_sys_admin”) = > bool (false) (“last_login_date”) = >字符串(19)“2019-07-10 15:04:45”(“主机”)= >字符串(20)(“dreamfactory-demo-30 oauth_token "] = >字符串(129)(“OAUTH_TOKEN_HERE id_token "] = >字符串(1245)“ID_TOKEN_HERE”}

你会将这样的一个脚本添加到您的应用程序为了检索智威汤逊(内定义session_token属性),随后通过JWT以及未来API请求。现在所有的谜题,身份验证工作流是什么样子?让我们穿过整个过程。

创建身份验证链接,您将使用这个URL:

https://YOUR_DREAMFACTORY_SERVER.com/api/v2/user/session?service=YOUR_SERVICE_NAME

当然你需要替换YOUR_DREAMFACTORY_SERVER与你DreamFactory服务器的域名,YOUR_SERVICE_NAMEOpenID的名称服务创建DreamFactory内部。

步骤# 2。使用指定的登录身份提供者

一旦用户点击这个链接,他将被重定向到身份验证形式,使用谷歌OpenID时是这样的:

进入你的电子邮件地址和密码后,用户将被提示确认允许客户端访问指定的资源:万博手机登录平台

第三步。DreamFactory生成会话密钥

一旦用户点击允许OpenID提供者将返回的授权信息到重定向URL。在这一点上与重定向URL相关联的脚本将这些信息在DreamFactory脚本(见上图),和DreamFactory脚本将返回会话令牌,此时您的应用程序可以保存它,包括后续的请求。

验证与Okta

Okta是一个强大的和流行的身份管理解决方案由成千上万的企业在全球范围内使用。许多开发人员希望Okta集成到他们的应用程序的身份验证的基础设施,和DreamFactory提供了一个简单的解决方案。在本教程中我们将指导您完成配置过程。

配置OKTA

首先创建一个Okta账户https://www.okta.com如果你还没有这么做的话)。一旦登录,打开管理部分:

接下来,您将添加一个新的应用程序:

一定要选择SAML 2.0:

接下来,我们将配置应用程序:

开放设置说明,确保你不关闭选项卡包含这些指令之后我们会回到它们:

配置DreamFactory

接下来,我们将配置DreamFactory支持新OKTA应用程序。首先签署到DreamFactory作为管理员,然后导航到角色节和配置一个角色的用户将签署通过Okta SSO。这里有一个例子一个角色定义访问所有api(不典型但说明):

定义了角色后,导航到应用程序选项卡并创建一个新的API密匙将与此相关的角色:

创建一个SAML 2.0服务

定义角色和API密匙后,是时候创建SAML 2.0服务DreamFactory Okta应用程序将连接。导航到服务>创建,选择SSO,最后SAML 2.0:

首先配置信息标签:

接下来,配置配置选项卡,填写Okta中的字段的信息设置说明页面:

保存这些更改,导航到API文档选项卡。在这里你可以看到新的Okta端点:

Okta用户添加到DreamFactory应用程序

Okta应用程序创建和配置DreamFactory,回到Okta,导航到管理应用应用程序页面:

选择我们DreamFactory应用列表中:

这个应用程序分配给人民和组织将使用它:

一般选项卡并单击编辑按钮:=

改变单点登录网址观众URI (SP实体ID)中给出的值DreamFactory Okta API文档,然后保存更改:

应用程序配置

我们几乎完成了!现在我们可以通过Okta要服务的/ sso端点。在我们的示例应用程序分配标志与OKTA按钮这个端点。单击这个按钮,DreamFactory可以返回X-DreamFactory-Session-Token,我们必须使用与DreamFactory沟通:

但DreamFactory知道如何发送令牌呢?我们必须配置继电器状态为这个目的。打开服务选项卡并选择您OKTA SSO服务。导航到配置选项卡并更新继电器状态URL字段将包含令牌从DreamFactory回来。网站托管在我们的例子http://127.0.0.1:5500令牌传递给吗/ hello.html页面:

DreamFactory将取代_token_与一个真正的X-DreamFactory-Session-Token。然后你可能会使用JavaScript来保存这个令牌本地存储,或使用服务器端语言使用cookie来做同样的事情:

现在我们可以通过包括与DreamFactory沟通X-DreamFactory-Session-TokenX-DreamFactory-API-Key请求头:

不要忘记您的应用程序添加到歌珥接口通过配置>歌珥。我们的示例歌珥配置允许任何请求所有DreamFactory端点与任何头。您可以配置它是更安全:

调试SAML

您可以使用浏览器扩展视图SAML消息从客户端传递到身份验证服务提供者。

管理用户配置文件

用户选项卡提供了一个方便的界面来管理用户配置文件,但它只提供了一个窗口等基本信息的电子邮件地址,密码和电话号码。不过你可以通过添加自定义用户属性扩展配置文件。这是如何实现将取决于是否验证或未经身份验证的用户。

前者将应用当用户也许是登录到配置文件管理器通过一个web表单,积极维护自己的形象,例如。后者将应用在这种情况下,管理员使用一个管理界面,编辑配置文件或者一个脚本是批量更新用户信息。在本节中,我们将向您展示如何更新用户配置文件以适应两种情况。

通过身份验证的用户添加自定义属性

如果用户身份验证和管理自己的配置文件,您将使用POST / api / v2 / user /自定义端点,通过用户的会话密钥和一个包含自定义属性的有效载荷。例如,如果用户想要更新他的办公大楼和号码,然后下面的负载将被派往上述端点:

{“资源”({:“名字”:“建筑”,“价值”:“Folsby”},{“名称”:“房间”,“价值”:" 456 "})}

注意负载列举每个属性使用的名字价值对。还有,别忘了另外发送用户的会话令牌使用X-DreamFactory-Session-Token头。

更多信息

未经身份验证的用户添加自定义属性

如果你想管理修改未经过身份验证的用户的自定义属性,您将使用把/ api / v2 /系统/ user / {ID}端点和另外提供相关的参数。下面是一个示例URI:

' / api / v2 /系统/用户/ 7 ?相关= user_custom_by_user_id '

通过身份验证的用户,这样的你会传递一个有效载荷:

{“资源”({:“名字”:“建筑”,“价值”:“Folsby”},{“名称”:“房间”,“价值”:" 456 "})}

管理自定义用户属性的更多信息,查看这个wiki页面

LDAP身份验证与DreamFactory

设置为用户到您的基于ldap的身份验证DreamFactory工作流是一个简单的过程,甚至通过LDAPS几乎不需要配置在客户端(DreamFactory)。在下一节中,我们将指导您完成设置这一过程。如果你想创建一个LDAP服务器来测试,然后我们也提供了一个教程下面与两个用户设置一个基本的目录。

测试您的LDAP连接

在实际创建LDAP服务之前,最好的方式来测试DreamFactory能够连接到LDAP服务器是通过创建下面的脚本在DreamFactory环境。

vim connection.php

< ?php连接=美元ldap_connect (“< YourLDAPURI >”);ldap_set_option(美元连接LDAP_OPT_PROTOCOL_VERSION 3);ldap_set_option(美元连接LDAP_OPT_REFERRALS 0);(搜索= ldap_search美元联系,' < YourBaseDN > ', ' (uid = < someUser >) ');结果=美元ldap_get_entries(连接,搜索美元);如果收取($结果[0][“dn”])) {echo $结果[0](“dn”);}

LDAP uri将的ldap: / /主机:端口(如果需要)例如,将BaseDNdc =练习,dc =净uid可以是您希望的任何用户测试。

保存并运行php connection.php如果成功,你会得到一个看起来像:

“uid =灰岩洞,ou =员工,dc =练习,dc =净'

这表明DreamFactory可以看到您的LDAP服务器,我们可以配置服务。

配置LDAP

配置LDAP,使用管理员帐户登录到你的DreamFactory实例并单击服务选项卡:

界面的左边你会看到的创建按钮。点击这个按钮开始。你会看到一个下拉表单控件标题选择服务类型。你会经常使用这个下拉来生成新的api以及配置authenetication选项。现在,让我们浏览LDAP然后标准LDAP

在选择标准LDAP,您将看到以下形式:

让我们来回顾一下这些字段:

  • 的名字:名字将表单API URL的一部分,所以使用小写的字符串没有空格或特殊字符。进一步,你通常要选择一些阿洛韦您轻松地识别它的目的。为您的LDAP身份验证等您可能选择一个名称ldap,用户,或开发人员。小写字母是一个要求。
  • 标签:标签是用于参考目的在管理界面中,选择时,也将使用登录时验证类型(后面详细讨论)。更简洁是好的,比如“LDAP用户登录”。
  • 描述:如标签,描述用于参考目的在管理界面和系统相关的API的响应。

在完成这些字段,单击配置标签公司的接口。您将看到以下形式:

没有太多的字段,所以可以让经历:

  • 主机:目录服务器的主机地址。这可能是一个IP地址或域名。在这里输入端口号。
  • 默认角色:DreamFactory可以自动分配一个默认角色(看到更多在这里用户成功登录后。在这里你可以识别这个角色。
  • 每个应用程序的作用:如果通过分配毛毯的作用默认角色不需要设置,您可以使用此设置分配角色在每个应用程序的基础上。
  • 基本DN:我。e的起点在哪儿eyour LDAP服务器搜索用户。例如dc =示例中,dc = com
  • 账户后缀:通常与你的基本DN。@example.com

完成后,按下保存按钮来生成。过了一会儿你会看到一个弹出消息指示服务保存成功。恭喜你!

现在退出DreamFactory,您将注意到登录页面现在有一个“服务”下拉。服务将被分配到标签对应在创建LDAP服务。

选择你的新ldap身份验证方法,你将能够登录用户名(uid)和userPassword。

如果您注销,重新登录的管理员,您将注意到,在用户选项卡中,用户在与你签署了ldap已被添加。

配置ldap

LDAPS,上述过程是一样的,但是你需要进入你的DreamFactory服务器,并作出以下修改/添加/etc/ldap/ldap.conf

TLS_REQCERT允许

(您也可以使用TLS_REQCERT从来没有)

如果您使用的是客户端证书,然后确保TLS_CACERT选项也指向正确的文件。(您也可以使用TLS_CACERTDIR指向一个目录,而不是一个特定的文件)。还记得运行sudo update-ca-certificates在安装你的证书。

API使用LDAP身份验证

你可以做以下为ldap服务API调用:

文章https://your-url/api/v2/user/session?service= {ldap_service_name}

在体内,JSON:

{“用户名”:“uid”,“密码”:“userPassword”}

响应一个例子是:

{:“session_token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJmNDdmNTcxN2ZlNzFiYjg0YWQ3ZDg4ZDBjYjEzMmI5NCIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3QvYXBpL3YyL3VzZXIvc2Vzc2lvbiIsImlhdCI6MTYyMjcwODcwMCwiZXhwIjoxNjIyNzk1MTAwLCJuYmYiOjE2MjI3MDg3MDAsImp0aSI6IkhKWnsfgafgafeghaTFRvVmRzUlAiLCJ1c2VyX2lkIjo5LCJmb3JldmVyIjpmYWxzZX0。Fz6IJolnuuQ0i8bT0HJZm1eALrtmmi6my4mewg2TG78”、“session_id eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJmNDdmNTcxN2ZlNzFiYjg0YWQ3ZDg4ZDBjYjEzMmI5NCIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3QvYXBpL3YyL3VzZXIvc2VsfgafhgsImlhdCI6MTYyMjcwODcwMCwiZXhwIjoxNjIyNzk1MTAwLCJuYmYiOjE2MjI3MDg3MDAsImp0aSI6IkhKWndPRVNBTFRvVmRzUlAiLCJ1c2VyX2lkIjo5LCJmb3JldmVyIjpmYWxzZX0“:”。Fz6IJolnuuQ0i8bT0HJZm1eALrtmmi6my4mewg2TG78”、“id”: 9,“名字”:“灰岩洞诺曼”、“first_name”:“灰岩洞”、“last_name”:“诺曼”、“电子邮件”:“灰岩洞+ dreamfactoryldap@practice.net”、“is_sys_admin”:假的,”last_login_date”:“2021-06-03 08:25:00”、“主机”:“ef362f431a16”、“角色”:“ldapuser”、“role_id”: 12日”groupMembership is_root_admin“:[]:假}

故障排除LDAPS

客户端

唯一的客户端配置更改你需要(如前所述)TLS_REQCERT允许在你的ldap.conf文件,如果您使用的是客户端证书,双重检查TLS_CACERT选择是指向正确的文件,并运行sudo update-ca-certificates

服务器端

毫无疑问你是知,配置ldap的一场噩梦。给每个人的设置是不同的,很难提供任何咨询服务端,然而我们发现以下设置:

  • 检查证书的权限和所有权(应该给openldap):
sudo chgrp openldap /etc/ldap/ < certficatefile > _key。pem sudo chmod 0640 /etc/ldap/ < certificatefile > _key.pem
  • 添加以下企业配置:
dn: cn =配置添加:olcTLSCipherSuite olcTLSCipherSuite:正常-添加:olcTLSCRLCheck olcTLSCRLCheck:没有添加:olcTLSVerifyClient olcTLSVerifyClient:从来没有
  • 记得添加ldap: / / /你/etc/default.slapd文件。的SLAPD_SERVICES应该类似于下面的行:
SLAPD_SERVICES = " ldap: / / / ldapi: / / / ldap: / / /”

创建一个LDAP服务器

如果你想试一试在创建LDAP服务器,或者只是想要一些简单的测试,我们准备了以下教程来帮助当地一个LDAP服务器设置。取得了以下与Ubuntu操作系统。

  1. 在你的服务器,第一次运行sudo apt更新sudo apt升级确保一切都是最新的。

  2. 现在我们可以开始配置过程。sudo apt安装slapd ldap-utils。这个会询问您创建您的管理员密码。一旦你已经这么做了sudo dpkg-reconfigure slapd并遵循下面的说明:

    • 省略OpenLDAP服务器配置?- >没有
    • DNS域名:例如,practice.net
    • 组织名称:例如实践
    • 密码- > previoulsy创建的相同
    • 数据库后台- >使用MDB
    • 数据库删除当slapd清除?- >没有
    • 移动旧数据库吗?- >是的

    你可以检查所有已正确安装运行sudo树/etc/ldap/slapd.d。你应该得到这样子的:

    /etc/ldap/slapd.d├──cn =配置│├──cn =模块{0}。ldif│├──cn =模式││├──cn ={0}的核心。ldif││├──cn = {1} cos。ldif││├──cn = {2} nis。ldif││└──cn = {3} inetorgperson。ldif│├──cn =模式。ldif│├──olcBackend = {0} mdb。ldif│├──olcDatabase ={0}配置。ldif│├──olcDatabase ={1}前端。ldif│└──olcDatabase = {1} mdb。ldif└──cn =配置。ldif 2目录,11个文件

添加条目

允许创建一个条目。对象类,我们需要一个专有名称的组织单元(与类相关的属性),和自己的条目。当我们添加(或修改),我们需要创建一个文件.ldif格式。

创建一个文件sudo vim add_entries.ldif,并添加以下(编辑如你所愿):

dn: ou =员工,dc =练习,dc =净对象类:organizationalUnit ou:雇员dn: ou =组,dc =练习,dc =净对象类:organizationalUnit ou: dn: cn =开发者,ou =组,dc =练习,dc =净对象类:posixGroup cn:开发人员gid号:5000 dn: uid =灰岩洞,ou =员工,dc =练习,dc =净对象类:inetOrgPerson对象类:posixAccount objectClass: shadowAccount uid: tomo sn:诺曼givenName: tomo cn: tomo诺曼displayName: tomo诺曼uidNumber: 10000 gid号:5000 userPassword: tomo123 homeDirectory: /home/tomo dn: uid = alex, ou =员工,dc =练习,dc =净对象类:inetOrgPerson对象类:posixAccount objectClass: shadowAccount uid:亚历克斯sn:维埃拉givenName:亚历克斯·cn:亚历克斯·维埃拉displayName:亚历克斯·维埃拉uidNumber: 20000 gid号:5000 userPassword: alex123 homeDirectory: /home/alex

请注意我们已经创建了两个组织单位;员工和组织。我们创建了一个“开发者”组,和两个员工属于员工的组织单元,和谁都是“开发人员”(通过gid号)。添加新组和员工:

用ldapadd - x - d cn = admin, dc =练习,dc =净- w - f add_entries.ldif

它会提示你输入密码,然后返回以下:

添加新条目“ou =员工,dc =练习,dc =净“添加新条目”ou =组,dc =练习,dc =净”添加新条目“cn =开发者,ou =组,dc =练习,dc =净”添加新条目“uid =灰岩洞,ou =员工,dc =练习,dc =净”添加新条目“uid = alex, ou =员工,dc =练习,dc =净”

我们可以证实这些条目被添加通过运行ldapsearch - x微光- b dc =练习,dc =净

,你应该去好!您现在可以创建一个LDAP身份验证服务在DreamFactory使用上面的指导。

设置ldap

如果你已经有自己的域,那么你应该使用ssl证书。对于本练习,我们将创建自己的自签名证书为了得到LDAPS启动并运行:

  1. 首先我们创建ssl证书所需的工具:
    sudo apt安装gnutls-bin ssl-cert
  2. 创建私钥:
    “sudo certtool——generate-privkey比特4096——外部档案/etc/ssl/private/mycakey.pem”。
  3. 现在我们将创建一个自签名证书的模板文件。sudo vim /etc/ssl/ca.info并添加以下你喜欢(编辑):
    cn =实践ca cert_signing_key expiration_days = 3650
  4. 创建自签署证书:
    \ sudo certtool——generate-self-signed \ load-privkey /etc/ssl/private/mycakey.pem \——模板/etc/ssl/ca.info \外部档案/usr/local/share/ca-certificates / mycacert.crt

    和运行sudo update-ca-certficates你应该得到回报说证书已添加到受信任的ca的列表。像下面这样:

    在/etc/ssl/certs...更新证书1,0切除;完成了。运行钩子/etc/ca-certificates / update.d……完成了。
  5. 我们需要为服务器创建一个私有密钥。我们可以通过运行:
    sudo certtool——generate-privkey \——比特2048 \外部档案/etc/ldap/practice_slapd_key.pem

    (改变的关键的文件名匹配您的域)。

  6. 继续,我们将创建一个模板服务器证书(再一次,改变文件名和常见的名称以匹配您的域)。sudo vim /etc/ssl/localhost.info添加以下:
    组织实践= cn = localhost tls_www_server encryption_key signing_key expiration_days = 365

    然后创建使用刚才创建的服务器证书模板:

    sudo certtool——生成证书\ load-privkey /etc/ldap/localhost_slapd_key。pem \——load-ca-certificate /etc/ssl/certs/mycacert.pem \——load-ca-privkey /etc/ssl/private/mycakey.pem \——模板/etc/ssl/localhost.info \外部档案/etc/ldap/localhost_slapd_cert.pem
  7. 我们需要调整我们的权限和所有权这openldap可以阅读我们的关键:
    sudo chgrp openldap /etc/ldap/localhost_slapd_key。pem sudo chmod 0640 /etc/ldap/localhost_slapd_key.pem
  8. 差不多了!现在我们只需要告诉slapd TLS configugration。创建一个文件sudo vim certinfo.ldif和一切都指向正确的位置。
    dn: cn =配置添加:olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/mycacert.pem -添加:olcTLSCertificateFile olcTLSCertificateFile: /etc/ldap/localhost_slapd_cert。pem -添加:olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ldap/localhost_slapd_key。pem -添加:olcTLSCipherSuite olcTLSCipherSuite:正常-添加:olcTLSCRLCheck olcTLSCRLCheck:没有添加:olcTLSVerifyClient olcTLSVerifyClient:从来没有

    然后更新:sudo ldapmodify外部- h - y ldapi: / / / - f certinfo.ldif

  9. 最后,我们只需要去我们的slapd配置文件位于/etc/default/slapd并添加ldap。的SLAPD_Service最终应该看起来像下面的行:
    SLAPD_SERVICES = " ldap: / / / ldapi: / / / ldap: / / /”

    重新启动slapd和sudo systemctl重启slapd我们将开始ldaps连接。如果你运行sudo lsof - i - p - n | grep听您现在应该看到端口636听。输出将类似于这个:

    sshd 1269根3 u IPv4 19533 0 t0 TCP *: 22(听)sshd 1269根4 u IPv6 19544 0 t0 TCP *: 22(听)systemd-r 2836 systemd-resolve 13 u IPv4 26004 0 t0 TCP 127.0.0.53:53(听)slapd 20316 openldap 8 u IPv4 55269 0 t0 TCP *: 389(听)slapd 20316 openldap 9 u IPv6 55270 0 t0 TCP *: 389(听)slapd 20316 openldap 11 u IPv4 55274 0 t0 TCP *: 636(听)slapd 20316 openldap 12 u IPv6 55275 0 t0 TCP *: 636(听)

这是它!你将在端口389,现在有了一个LDAP连接和一个LDAP连接端口636,可以连接到你的客户(s)。

Active Directory LDAP和调试

您可以使用PHP脚本,以确定您的主机后,基本DN,和凭证是正确的:

< ?php $主机=“主机名”;$ baseDN =“baseDN”;$ username =“用户名”;密码=美元“密码”;(连接= ldap_connect美元主机)或死亡(“无法连接到LDAP服务器。”);ldap_set_option(美元连接LDAP_OPT_PROTOCOL_VERSION 3);ldap_set_option(美元连接LDAP_OPT_REFERRALS 0);(搜索= ldap_search美元连接,baseDN美元,“(uid =”。美元的用户名。 ')'); $result = ldap_get_entries($connection, $search); if (isset($result[0]['dn'])) { print_r($result); $userDN = $result[0]['dn']; echo "USER DN: " . $userDN . "\n"; } else { echo "USER DN NOT FOUND"; } $auth = ldap_bind($connection, $userDN, $password); if ($auth) { echo "LDAP bind successful."; } else { echo "LDAP bind failed."; }
Baidu
map