通过 OpenID Connect 进行身份验证并通过 ldap 进行授权的 Apache2 反向代理
Apache2 Reverse Proxy with authentication over OpenID Connect and authorization over ldap
我正在尝试设置需要针对 OpenID Connect 身份提供商进行身份验证的反向代理。
然后用户授予反向代理访问其数据的权限。
代理后面的某些应用程序只有当用户是特定 LDAP 组的成员时才能访问。可悲的是,应用程序是转储,无法授权自己,因此反向代理必须处理这部分。
使用 mod_auth_openidc. What I struggle with is the authorization part. I have a working example with mod_authnz_ldap 设置身份验证部分并不难,它需要用户名和密码,而不是 BasicAuth。
OpenID Connect 的想法是资源服务器(在我的例子中是代理)永远不会知道用户的密码,也不必检查它。这是委托给 OpenID Connect 身份提供者。
所以我没有此方法所需的密码。我的想法是创建一个带有 oidc 身份验证的虚拟主机,它拒绝来自客户端的 header 之类的 x-my-oidc-username
,一旦通过身份验证就设置此 header 并将请求传递给绑定在 [=11= 上的另一个 vhost ] 因此无法绕过身份验证直接访问它。该虚拟主机仅将 header 作为经过身份验证的用户名并运行 LDAP 授权。
我还没有找到一种方法来跳过 ldap 模块的 Authentication Phase 并从其他地方获取用户名,例如 OpenID 连接 ID 令牌或从我的自定义 header。
任何 ideas/suggestions/approaches/tips?
这里有一篇文章介绍了如何组合 mod_auth_openidc
和 mod_authnz_ldap
:
https://github.com/pingidentity/mod_auth_openidc/wiki/Authorization#2-mod_authnz_ldap:
OIDCProviderMetadataURL https://accounts.google.com/.well-known/openid-configuration
OIDCClientID <client_id>
OIDCClientSecret <client_secret>
OIDCRedirectURI http://example.com/example/redirect_uri
OIDCScope "openid email profile"
# Set REMOTE_USER to the email address.
# this is the value that mod_authnz_ldap leverages as the first parameter after basedn.
# in the example below, REMOTE_USER = email = mail attribute in LDAP.
OIDCRemoteUserClaim email
<Location /example/>
AuthType openid-connect
AuthLDAPURL "ldap://example.com/ou=people,dc=example,dc=com?mail?sub?(objectClass=*)"
AuthLDAPGroupAttribute member
Require ldap-group cn=myTestAccesss,ou=Groups,dc=example,dc=com
</Location>
我正在尝试设置需要针对 OpenID Connect 身份提供商进行身份验证的反向代理。
然后用户授予反向代理访问其数据的权限。
代理后面的某些应用程序只有当用户是特定 LDAP 组的成员时才能访问。可悲的是,应用程序是转储,无法授权自己,因此反向代理必须处理这部分。
使用 mod_auth_openidc. What I struggle with is the authorization part. I have a working example with mod_authnz_ldap 设置身份验证部分并不难,它需要用户名和密码,而不是 BasicAuth。
OpenID Connect 的想法是资源服务器(在我的例子中是代理)永远不会知道用户的密码,也不必检查它。这是委托给 OpenID Connect 身份提供者。
所以我没有此方法所需的密码。我的想法是创建一个带有 oidc 身份验证的虚拟主机,它拒绝来自客户端的 header 之类的 x-my-oidc-username
,一旦通过身份验证就设置此 header 并将请求传递给绑定在 [=11= 上的另一个 vhost ] 因此无法绕过身份验证直接访问它。该虚拟主机仅将 header 作为经过身份验证的用户名并运行 LDAP 授权。
我还没有找到一种方法来跳过 ldap 模块的 Authentication Phase 并从其他地方获取用户名,例如 OpenID 连接 ID 令牌或从我的自定义 header。
任何 ideas/suggestions/approaches/tips?
这里有一篇文章介绍了如何组合 mod_auth_openidc
和 mod_authnz_ldap
:
https://github.com/pingidentity/mod_auth_openidc/wiki/Authorization#2-mod_authnz_ldap:
OIDCProviderMetadataURL https://accounts.google.com/.well-known/openid-configuration
OIDCClientID <client_id>
OIDCClientSecret <client_secret>
OIDCRedirectURI http://example.com/example/redirect_uri
OIDCScope "openid email profile"
# Set REMOTE_USER to the email address.
# this is the value that mod_authnz_ldap leverages as the first parameter after basedn.
# in the example below, REMOTE_USER = email = mail attribute in LDAP.
OIDCRemoteUserClaim email
<Location /example/>
AuthType openid-connect
AuthLDAPURL "ldap://example.com/ou=people,dc=example,dc=com?mail?sub?(objectClass=*)"
AuthLDAPGroupAttribute member
Require ldap-group cn=myTestAccesss,ou=Groups,dc=example,dc=com
</Location>