基于Keycloak实现LDAP服务
背景
优点
- LDAP 协议的价值,存量应用多。
缺点
- 易用性
- 管理机制
- 扩展性
- 高可用机制
- 观测
如何基于keycloak实现LDAP语义
Root DN(Base DN)
在Realm级构建
dc=realm,dc=example,dc=com
Users DN(ou=users)
如果有用户bob
ou=users,dc=realm,dc=example,dc=com
cn=bob,ou=users,dc=realm,dc=example,dc=com
Groups DN(ou=groups)
Keycloak有Groups
功能,CN命名可能需要通过attribute来实现。
ou=groups,dc=realm,dc=example,dc=com
cn=group1,ou=groups,dc=realm,dc=example,dc=com
Clients DN(ou=clients or ou=apps)
Keycloak通过Client来表示一个应用程序,如果在应用级授权,主要是通过client级role机制来实现。 如:授权bob可以登陆gitlab,可以在gitlab client中创建role: member,然后在gitlab侧的ldap认证配置中使用memberOf表达式
ou=clients,dc=realm,dc=example,dc=com
cn=gitlab,ou=clients,dc=realm,dc=example,dc=com
Bind(认证)
OAuth2 “Direct Access Grants”
curl -X POST http://localhost:8180/realms/quickstart/protocol/openid-connect/token \
-H 'content-type: application/x-www-form-urlencoded' \
-d 'client_id=authz-servlet&client_secret=secret' \
-d 'username=alice&password=alice&grant_type=password'
注:该操作会生成session
OTP 支持
token_endpoint 支持 otp 参数
Search
其它LDAP API
大部分的场景是认证,增、删、改可以不实现,使用Keycloak的管理控制台实施。
LDAP 协议代理
GLAuth 支持多种backend,可将keycloak作为一种后端。