你好 @balazsorban44,感谢你对此事的提醒。我已经对 PR 进行了初步审查。如果作者没有时间处理这些事情,那么很可能是我们可以接手的事情。我同意支持 PKCE 会很好。
但是,值得注意的是:我认为 Discourse 不容易受到 PKCE 保护的“授权码拦截”攻击。Discourse 身份验证始终在浏览器中通过 https 进行,并且不使用可能被其他应用程序拦截的操作系统级自定义 URL 方案。
当然,增加额外的安全层没有任何坏处 ![]()
你好 @balazsorban44,感谢你对此事的提醒。我已经对 PR 进行了初步审查。如果作者没有时间处理这些事情,那么很可能是我们可以接手的事情。我同意支持 PKCE 会很好。
但是,值得注意的是:我认为 Discourse 不容易受到 PKCE 保护的“授权码拦截”攻击。Discourse 身份验证始终在浏览器中通过 https 进行,并且不使用可能被其他应用程序拦截的操作系统级自定义 URL 方案。
当然,增加额外的安全层没有任何坏处 ![]()
不一定担心安全问题。
我在此处处理了反馈,保留了原始贡献者的署名:feat: PKCE support by balazsorban44 · Pull Request #86 · discourse/discourse-openid-connect · GitHub
很高兴能完成这项工作 ![]()
你找到解决方案了吗?
不,很遗憾。
@swt2c 我通过在 plugin.rb 中 params << ["post_logout_redirect_uri", post_logout_redirect] if post_logout_redirect 行之后添加以下代码,将其集成到了插件中:
params << ["client_id", "<my-client-id>"]
params << ["logout_uri", post_logout_redirect] if post_logout_redirect
如果能获得官方支持就太好了!
@balazsor55 感谢您承担此任务!我刚刚合并了 PR,现在我们的插件支持选择加入 PKCE 了 ![]()
嘿 Chris,
您是如何将 Authentik 与此插件集成的?任何见解都将有所帮助。我们已经挣扎了几周,希望能正确使用它。
嗯,我记不起什么特别的事情了。你具体有什么问题?你想分享一些你的配置截图(也许通过私信)吗?
谢谢你的回复,克里斯。好的。这周晚些时候,我的开发团队(他们一直在处理 authentik)在的时候再和你联系。主要问题是关于流程和 outpost。
我遇到了一个有趣的问题。在公开部署之前,我想测试一切是否正常,所以我的 OIDC 提供商托管在本地(私有子网)并且无法从互联网访问。
不幸的是,这会失败,因为 Discourse 不允许连接到私有 IP。
oidc.example.org 解析为私有 IP。
OIDC Log: Fetching discovery document from https://oidc.example.org/application/o/discourse/.well-known/openid-configuration
OIDC Log: Fetching discovery document raised error Faraday::ConnectionFailed FinalDestination: all resolved IPs were disallowed
OIDC Log: Discovery document is
---
(oidc) Request phase initiated.
(oidc) Authentication failure! openid_connect_discovery_error: OmniAuth::OpenIDConnect::DiscoveryError, Discovery document is missing
我认为,因为 openid_connect_discovery_document 只能由管理员更改,所以它应该是受信任的,并且允许私有 IP。
有一个名为“allowed_internal_hosts”的站点设置。如果您将内部主机名添加到该列表中,那么 SSRF Detector 将允许对它的请求。
在共享托管服务(例如官方 discourse.org 托管)中,不信任管理员在托管环境中发出请求,这就是为什么默认存在此保护。
抱歉,但我不确定我是否能按照指示安装插件。我在本地的Docker环境中运行Discourse,但我找不到用于添加配置的app.yml。
可能是个愚蠢的问题,但是否有在本地开发环境中安装的指南?
对于 Docker 开发环境,请尝试检查 /var/discourse/containers/app.yml?
但是,对于非 Docker 开发安装,请参阅此处:
问题是找不到名为“containers”的文件夹。
您好。
我添加了这个插件,它运行正常。我遇到的问题是,我们的 discourse 应用有别名,所以我可以用两个 URL 登录。两者都在 Azure 中配置了正确的重定向 URL。我注意到,调用 https://discourse.company.com/auth/oidc 时,Location URL 返回的是别名 URL,例如 https://login-blah-bla/authorize?client_id=&redirect_uri=https%3A%2F%[2Fdiscourse.us.company.com](http://2fdiscourse.us.company.com/)%2Fauth%2Foidc%2Fcallback。
它难道不应该遵循原始 URL 吗?
有一个 openid_connect_error_redirects,但我认为它只用于错误情况。您有什么办法可以更改重定向到(也称为 discourse.company.com)的授权服务器吗?
在进行手动 bundle 安装时,我会看到以下内容:
Post-install message from oauth2:
你已经安装了 oauth2 版本 1.4.11,这是一个已达到生命周期终点(EOL)的版本。
不再预计会对 1.4.x 系列提供支持。
建议升级到 oauth2 版本 2。没有这些消息我会感觉更安心,你们有计划进行升级吗?
我还看到:
You have installed oauth version 1.1.0, congratulations!
非商业支持的 1.x 系列将在 2025 年 4 月停止。请在此日期之前制定升级到下一版本的计划。
唯一的重大变化将是停止支持 Ruby 2.7 以及在那之前也已达到 EOL 的其他版本。
但我猜这不是 “你” 的问题吧?
您好,
为了插件的正常运行,必须启用“允许新注册”选项。这样可以在首次连接到 Discourse 时自动创建帐户,并显示一个“注册”按钮。但是,是否可以允许禁用它:即不允许通过 openidconnect 连接的用户修改其参数并直接创建其帐户。这将允许从显示中删除在此上下文中不应存在的“注册”按钮。
此致敬礼
你搞明白了吗?我也卡在同一个信息上。
嘿,你搞定了吗?我不知道为什么我在这上面完全卡住了,在我管理过的数百个使用 OpenID 或身份验证的应用程序中,这个给我带来了最大的麻烦。