失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > ldap统一用户认证php 针对LDAP服务器进行身份认证

ldap统一用户认证php 针对LDAP服务器进行身份认证

时间:2022-12-30 20:54:41

相关推荐

ldap统一用户认证php 针对LDAP服务器进行身份认证

Symfony提供了不同的方法来配合LDAP服务器使用。

Security组件提供:

ldap user provider,使用的是

form_login_ldap authentication provider,用于针对一台使用了表单登录的LDAP服务器。同所有其他user provider一样,它可以同任何authentication provider一起使用。

http_basic_ldap authentication provider,用于针对一台使用了HTTP Basic的LDAP服务器。同所有其他user provider一样,它可以同任何authentication provider一起使用。

这意味着在以下场合是可以工作的:

利用一台LDAP服务器来比对用户密码并取出用户信息。这可以使用LDAP user provider,以及LDAP form login或LDAP HTTP basic两个authentication provider中的一种来完成。

利用一台LDAP服务器来比对用户密码,但从另一个资源处取得用户信息(比如,一个使用了FOSUserBundle的数据库)。

从一台LDAP服务器取出用户信息,同时使用另一种用户验证策略(比如,基于token的预验证)。

LDAP配置参考¶

完整的LDAP配置参考 (form_login_ldap, http_basic_ldap, ldap) 请见 SecurityBundle Configuration ("security")。其中一些更有意思的选项在此进行解释。

配置LDAP客户端¶

所有架构都需要LDAP客户端被预先配置好。providers被配置为使用一个名为 ldap 的服务,但你也可以在security组件的配置信息中覆写此项设置。

使用下列配置,一个LDAP客户端可以被简单地配置:

1

2

3

4

5

6

7

8

9

10# app/config/services.ymlservices:ldap:class:Symfony\Component\Ldap\LdapClientarguments: - my-server # host

- 389 # port

- 3 # version

- false # SSL

- true # TLS

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/schema/dic/services /schema/dic/services/services-1.0.xsd">

my-server

389

3

false

true

1

2

3

4

5

6

7

8

9

10

11

12

13// app/config/services.php

use Symfony\Component\Ldap\LdapClient;

use Symfony\Component\DependencyInjection\Definition;

$container

->setDefinition('ldap', new Definition(LdapClient::class, array(

'my-server',

389,

3,

false,

true,

));

利用LDAP User Provider取出用户¶

如果你想从一台LDAP服务器中取出用户信息,你就需要使用 ldap user provider了:

1

2

3

4

5

6

7

8

9

10

11

12

13# app/config/security.ymlsecurity: # ...

providers:my_ldap:ldap:service:ldapbase_dn:dc=example,dc=comsearch_dn:"cn=read-only-admin,dc=example,dc=com"search_password:passworddefault_roles:ROLE_USERuid_key:uid

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

xmlns:xsi="/2001/XMLSchema-instance"

xmlns:srv="/schema/dic/services"

xsi:schemaLocation="/schema/dic/services

/schema/dic/services/services-1.0.xsd">

service="ldap"

base-dn="dc=example,dc=com"

search-dn="cn=read-only-admin,dc=example,dc=com"

search-password="password"

default-roles="ROLE_USER"

uid-key="uid"

/>

1

2

3

4

5

6

7

8

9

10

11

12

13

14$container->loadFromExtension('security', array(

'providers' => array(

'ldap_users' => array(

'ldap' => array(

'service' => 'ldap',

'base_dn' => 'dc=example,dc=com',

'search_dn' => 'cn=read-only-admin,dc=example,dc=com',

'search_password' => 'password',

'default_roles' => 'ROLE_USER',

'uid_key' => 'uid',

),

),

),

);

ldap user provider支持多种不同的配置选项:

service¶

值类型: string 默认值: ldap

这是你所配置的LDAP客户端的名字。你可以随便选择名称,但必须是程序中的唯一,并且不允许以数字或空格开头。

base_dn¶

值类型: string 默认值: null

这是目录的base DN。

search_dn¶

值类型: string 默认值: null

这是你的只读用户的DN,用于对LDAP服务器进行认证,以便取出用户信息。

search_password¶

值类型: string 默认值: null

这是你的只读用户的密码,用于对LDAP服务器进行认证,以便取出用户信息。

default_roles¶

值类型: array 默认值: []

这是你希望分配给“从LDAP服务器取出的用户”之默认role。如果你不配置此键,用户不会有任何role,并不被当作“完全认证”(fully authenticated)的用户。

uid_key¶

值类型: string 默认值: sAMAccountName

这是入口点(entry)的key,用作其uid。取决于你的LDAP服务器之具体落实(implementation)。常用值是:

sAMAccountName

userPrincipalName

uid

filter¶

值类型: string 默认值: ({uid_key}={username})

这个键让你配置哪个LDAP查询将被使用。{uid_key} 字符串将被 uid_key 配置值所替换 (默认时, sAMAccountName) 和 {username} 字符串将被你“正在尝试加载的用户名”给替换。

例如,带有一个 uid 值的 uid_key,如果你尝试加载 fabpot 用户,最终的字符串将会是: (uid=fabpot)。

当然,用户名会被转义,为的是防止 LDAP injection。

filter 选项键的语法被 RFC4515 所定义。

针对LDAP服务器进行身份认证¶

针对LDAP服务器进行身份认证,可以藉由使用form login或是HTTP Basic两个authentication providers来完成。

除了两个选项键之外,它们和“非LDAP”情况下的配置完全一样:

service¶

值类型: string 默认值: ldap

这是你所配置的LDAP客户端的名字。你可以随便选择名称,但必须是程序中的唯一,并且不允许以数字或空格开头。

dn_string¶

值类型: string 默认值: {username}

这个键定义了“用于从用户名中组成用户的DN的字符串”的格式。{username} 字符串将被正在认证的人的真实用户名所替换。

例如,如果你的用户拥有 uid=einstein,dc=example,dc=com 这样一个DN字符串,那么 dn_string 将会是 uid={username},dc=example,dc=com。

下面给出了 form_login_ldap 和 http_basic_ldap 的配置示例。

表单登陆之配置示例¶

1

2

3

4

5

6

7

8

9

10

11

12

13# app/config/security.ymlsecurity: # ...

firewalls:main: # ...form_login_ldap:login_path:logincheck_path:login_check

# ...service:ldapdn_string:'uid={username},dc=example,dc=com'

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

xmlns:xsi="/2001/XMLSchema-instance"

xmlns:srv="/schema/dic/services"

xsi:schemaLocation="/schema/dic/services

/schema/dic/services/services-1.0.xsd">

login-path="login"

check-path="login_check"

service="ldap"

dn-string="uid={username},dc=example,dc=com" />

1

2

3

4

5

6

7

8

9

10

11

12

13$container->loadFromExtension('security', array(

'firewalls' => array(

'main' => array(

'form_login_ldap' => array(

'login_path' => 'login',

'check_path' => 'login_check',

'service' => 'ldap',

'dn_string' => 'uid={username},dc=example,dc=com',

// ...

),

),

)

);

HTTP Basic登录之配置示例¶

1

2

3

4

5

6

7

8

9

10

11# app/config/security.ymlsecurity: # ...

firewalls:main: # ...http_basic_ldap: # ...service:ldapdn_string:'uid={username},dc=example,dc=com'

1

2

3

4

5

6

7

8

9

10

11

12

13

14

xmlns:xsi="/2001/XMLSchema-instance"

xmlns:srv="/schema/dic/services"

xsi:schemaLocation="/schema/dic/services

/schema/dic/services/services-1.0.xsd">

1

2

3

4

5

6

7

8

9

10

11

12$container->loadFromExtension('security', array(

'firewalls' => array(

'main' => array(

'http_basic_ldap' => array(

'service' => 'ldap',

'dn_string' => 'uid={username},dc=example,dc=com',

// ...

),

'stateless' => true,

),

),

);

如果觉得《ldap统一用户认证php 针对LDAP服务器进行身份认证》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。