问题标签 [mod-auth-openidc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache - 使用 mod_auth_openidc 和 keycloak 进行 cURL 身份验证
我有一个运行 Keycloak 的身份验证服务器,以及一个带有 mod_auth_openidc 的 Apache2 网络服务器来进行 OAuth2 授权。
使用浏览器,我可以成功拦截对受保护资源的访问,以将用户重定向到 Keycloak 登录页面。成功登录后,用户将被重定向到资源链接。
使用 Postman,我还可以通过密码授予流程检索访问令牌 JWT,然后使用访问令牌访问受保护的资源。postman 提供的 cURL 代码表明 mod_auth_openidc_session cookie 也是必需的。
接下来,我尝试在 Linux CLI 中执行 2 阶段 cURL 命令。
首先,我使用如下密码授予流程检索访问令牌。我启动了 cookie 引擎来捕获 mod_auth_openidc 提供的会话 cookie。
接下来,使用标头和 cookie jar 文件中的访问令牌持有者,我尝试访问受保护的资源。
但是,我仍然被重定向到 Keycloak 登录页面,并且会话 cookie 没有记录在 cookie jar 文件中。
这是记录的 cookie jar 文件,其中敏感信息已编辑/替换。
谁能告诉我我在 2 阶段 cURL 身份验证/授权过程中做错了什么?
apache - keycloak、Apache、mod_auth_openidc、elasticsearch opendistro
我正在尝试设置单点登录 (SSO) 以访问 apache 2.4 上的私有目录,并为 keycloak 登录用户分配弹性搜索 (opendistro) 中的角色。在 keycloak 中为用户分配角色没有真正的问题(并且也成功连接到 openldap 服务器)。如果我将 Bearer 令牌发送到 ES,它将角色链接到后端角色。一切都迎接。
问题是elasticsearch是无状态的,它似乎没有读取从keycloak和mod_auth_openidc获得的cookie(无法正确设置config.xml)。所以,我无法让 ES 使用 opendid 连接会话。
所以,我决定为 ES 选择 Bearer Authentication,我需要在对 ES 的每个 http 请求中添加 Bearer http 标头。
我通过添加以下内容从 mod_auth_openidc 获得 Bearer 令牌:
标头集授权“承载 %{OIDC_access_token}e” env=OIDC_access_token
到我在 apache conf 中受保护的位置(启用的标头模块)。但是当我尝试将该令牌与 curl (for testing) 一起使用时,它不会工作
我得到 401 未经授权。弹性搜索日志:
编辑:我将 keycloak 中访问令牌的算法更改为 HS256,现在我得到了
这个 shell 脚本有效:
opendistro 安全插件配置:
任何想法如何设置弹性搜索来识别该令牌?
apache - 使用 mod_auth_openidc 连接到具有相同提供程序的多个客户端
mod_auth_openidc wiki 描述了如何连接到使用不同发行者的不同客户端:https
://github.com/zmartzone/mod_auth_openidc/wiki/Multiple-Providers
但是在我的情况下,我有两个具有相同提供者的客户端。更具体地说,我在 Auth0 租户上有两个应用程序,用户应该能够在站点上选择他们要登录的应用程序。
有没有办法指定多个受保护的 lcoations 并根据您尝试访问的方式,您将使用不同的 redirecturi 和 clientid/clientsecret 进行身份验证。
apache - 如何重写 url 以使用 Apache 附加标头
https://www.example.com/some_path/rpc/x/y/z.pbf
我有一个 Apache 实例,它以包括标头在内的形式接收请求OIDC_CLAIM_foo = "[1,2]"
如何重写 URL,以便当它包含“rpc”时,标头作为查询字符串的一部分附加,即:https://www.example.com:3000/other_path/rpc/x/y/z.pbf?foo=[1,2]
是否可以对查询的 [1,2] 部分进行 urlencode?
apache - 如何使用 mod_auth_openidc 注销
我使用 mod_auth_openidc 在我的网站上实现登录。我使用多个提供程序,因此要启动登录到我重定向到的一个:
/protected/redirect_uri/?target_link_uri=<urlencoded protected location>&iss=<urlencoded issuer>
按预期工作。
现在我想以类似的方式启动注销,通过将注销按钮指向:
/protected/redirect_uri?logout=<urlencoded logoutpage>&iss=<urlencoded issuer>
但我只是得到一个 404。当然/protected/redirect_uri
实际上并不存在,但对于某些原因,openidc 不处理注销请求。
注销页面不受保护,并且提供者end_session_endpoint
的元数据中有一个。
perl - 如何从基于 Apache 的 Web 应用程序查询 Azure AD?
我正在开发一个使用 CentOS、Apache、PostgreSQL、Perl 和 CGI 的 Web 应用程序。此应用程序必须从 Azure AD 进行身份验证。此外,应该可以查询 Azure AD 以检索用户属性,例如他的名字、姓氏、电子邮件地址等。如果在 Azure AD 中启用或禁用用户等。对于身份验证,我使用了以下模块:
我已将它安装在 CentOS 中,并带有所有必需的依赖项。我在 Azure AD 中进行了应用注册并进行了配置。在 Apache SSL 配置中,我为 openidc 配置了所需的设置,然后我可以通过 Azure AD 从 Web 应用程序进行身份验证。所以一切都很顺利。
当用户通过身份验证并创建会话时,我想查询 Azure AD 以获取用户的属性。是否有从 AD 查询的 Perl CPAN 模块?还是其他什么手段?
我想列出 Azure AD 中属于特定目录层次结构的用户,并将这些用户及其属性添加到 PostgreSQL 数据库中。同样,我需要查询 Azure AD 是否相同?一旦我可以从 Azure AD 查询和检索信息,写入 PostgreSQL 就没有问题了。如何从 Azure AD 查询目录层次结构?
此外,Azure AD 中是否有任何 LDAP 集成,因为 Perl CPAN 具有从 Active Directory 执行查询的 Net::LDAPS 模块。是否可以在 Perl 中使用 Net::LDAPS 模块来查询 Azure AD?
我是 Azure AD 的新手,遇到了所有这些问题。任何建议都受到高度赞赏。
apache2 - Apache 2 无法成功加载模块?
我们有一个较旧的 ubuntu 14 服务器,目前正在运行,并且正在运行 apache2,我正在尝试安装一个开放的 idc 模块以使 SSO 在我们公司工作。我知道... Ubuntu 14 很旧,但那是另外一罐蠕虫...
当我跑
它成功显示 auth_openidc_module (shared) 我还验证了 'auth_openidc.conf' 在我的 /etc/apache2/mods-enabled 目录中
但是,当我添加我的 apache2.conf 时:
并执行“apachectl -M”命令我收到以下错误。
'/etc/apache2/apache2.conf 第 57 行的语法错误:无法将模块/mod_auth_openidc.so 加载到服务器中:/etc/apache2/module/mod_auth_openidc.so:无法打开共享对象文件:没有这样的文件或目录操作' -M'失败。'
另一个令人困惑的地方是,我在 Apache 中的任何地方都看不到任何名为“auth_openidc_module”的目录或任何 .so 文件。我看过一些帖子说 .so 文件可能在“/usr/lib64/httpd/modules”中,但我的 lib64 目录是空白的......
我是所有这一切的新手......我错过了什么?
openid-connect - 将 mod_auth_openidc 与登录表单集成
我有几个在 Apache/CGI 下运行的网站需要对用户进行身份验证。目前的机制早已过时,所以我希望转向 OpenID Connect。为了让生活更轻松,我想使用 mod_auth_openidc 而不是从头开始编写代码。
我的组织直接支持 OIDC。棘手的部分是我们需要自己呈现登录表单。所以我有一个发送登录表单的小脚本,以及一个获取凭据并使用 REST 服务对其进行身份验证的身份验证处理程序。
如果我理解正确,mod_auth_openidc 会将其自己的会话 cookie 与 OIDC 令牌 ID/授权码/访问令牌相关联,因此用户代理只需要知道 mod_auth_openidc_cookie。
在我的情况下,Mod_auth_openidc 似乎只需要最少的配置。我能够验证用户凭据并轻松地从 OIDC privider 服务获取令牌 ID/授权码/访问令牌。我不清楚的是如何向用户代理发送响应,如果他们提供的凭据是好的,则让他们进入网站。
我在我的应用程序的登录页面中尝试了 302,只在 iPlanet 中发送令牌 ID,但这不起作用,因为 mod_auth_openidc 看不到令牌 ID。
apache - Keykcloak + apache mod_auth_openidc + zabbix HTTP AUTH
我想将keycloak AUTH配置为现代zabbix 5.2版
为了实现它,我使用了 apache mod_auth_openidc https://github.com/zmartzone/mod_auth_openidc
我的架构看起来像
- 用户转到 apache 位置,如果他没有授权,他会重定向到 keykloak
- 用户在 keyklock(内部 keycloak 用户)中进行身份验证并返回到 apache
- Apache 将他重定向到 zabbix (nginx) 前面
Keycloak 服务器:版本为 13.0.1
Apache:Apache/2.4.6 (CentOS)
nginx:版本 1.16.1 zabbix
:5.2.0
首先,我配置了简单的测试网页以确保“KC”正常工作
我的 apache 配置是
一切都很好。在 KC 授权后,我得到了我的页面
其次,我在 zabbix 中启用了 HTTP 身份验证 - 这只是简单的基本身份验证
我重新配置了我的 apache 位置
我要做的最后一件事是添加标题
我的问题是:如何从 keycloak 变量中获取用户名,例如preferred_username
并将其转换为 base64?
preferred_username
包含有效的用户登录。
更新
我仍在尝试配置此架构。我真的需要 OPEND 而不是 SAML,因为 keycloak 从浏览器中隐藏了他的标头我在 NGINX 服务器上使用 tcpflow
tcpflow -p -c -i eth0 port 80
我看到了来自我的 keycloak 服务器的标头
我在 nginx.conf 中打开了 underscores_in_headers,并
在 nginx 中配置了 zabbix 位置。我尝试了不同的方法和变量,但没有奏效
你能帮我抓住这个标题吗
apache - 使用 mod_auth_openidc 注销
一般来说,我对 OpenID 和身份验证非常陌生。我的问题如下:我们的应用程序在 apache 2.x 服务器(即我们的 RP)上提供服务,前端从静态目录提供服务,如果代理在后端/api
,则 OP 是一个 keycloak 实例。总的来说,我们设法让它工作,但我们正在努力注销。/redirect_uri?logout=<base-app-uri>
注销是通过在(当然使用 url 编码)发出 GET 请求来触发的。尽管我们的<base-app-uri>
受保护,我们希望在注销时显示默认登录页面。当访问上述 uri 时,后端 API 成功开始回答 401 并且会话在 Keycloak 控制台中消失,但 RP 不会将用户重定向到登录页面并继续提供受保护的静态内容。事实上,只有当我删除mod_auth_openidc_session
cookie 时才会实现重定向。