让 Discourse 作为 OIDC (OAuth 2.0) 提供者

花了一个月,终于是找到能实现这种效果的项目了。
Parkour-Vienna/distrust:将 discourse 用作 OIDC (OAuth 2.0) 提供者 — Parkour-Vienna/distrust: Use discourse as an OIDC (OAuth 2.0) provider

这个项目的作用是,作为Discourse SSO Provider和OAuth 2.0的中转器,让你在其他网站上能够配置“使用Discourse账号登录”。

我们用它来连接论坛和 synctv,因为我们有一些定期的直播可以一起看,而Discourse本身的stream插件的侧边栏聊天在人多了之后会很卡。

配置这个也遇到过很多坑,我推荐在clerk注册一个项目,可以比较方便的调试Oauth。

2 Likes

所以这个上做什么

卧槽,终于有这种项目了,之前就很羡慕隔壁的LinuxDo他们可以提供OIDC,问了之后是他们自己开发的插件。

比方说,Discourse可以配置使用github账号登录,在这个过程中github作为OIDC 提供者。
这个项目的作用是,利用Discourse本身自带的sso提供者功能,让协议从特殊的sso转换成常见的OIDC,来适应更多的网站。当用户打开我们的synctv直播站时,就不用重新注册账号,可以直接用Discourse账号登录。

意思就是 ? Discourse 当成一个 登录账号的提供平台可以然直接搭建的云盘或者其他可以登录的接入 discourse 嘛 那怎么操作呐🤔第一次用这种

你用的那个网盘是cloudreve?我看官方演示站支持sso登录,会跳转logto。所以在logto添加自定义oidc提供方 地址就是distrust部署的地址 app_id和app_key配置在distrust的config里面。

是否步骤是这样的

cd /opt/1panel/apps/openresty/openresty/www/sites/sso.justnainai.com/index
# 创建distrust.yml
curl -o distrust.yml https://raw.githubusercontent.com/Parkour-Vienna/distrust/main/example/distrust
# 打开distrust.yml写入模版
discourse:
  server: https://www.justnainai.com
  secret: YOUR_SHARED_SECRET  

oidc:
  secret: '12345678901234567890123456789012'  
  privateKey: |
    -----BEGIN RSA PRIVATE KEY-----
    MIICWwIBAAKBgQC9...
    -----END RSA PRIVATE KEY-----

clients:
  sso-client:
    secret: sso123456
    redirectURIs:
      - 'https://openidconnect.net/callback'  


# 生成 32 字节密钥
openssl rand -hex 16

# 使用 distrust 自带命令生成 RSA 密钥
./distrust genkey > key.pem

然后去Discourse 后台搜索这些设置:

enable discourse connect provider → 开启

discourse connect provider secrets → 添加:


最后
./distrust 对吧

呆滞


discourse:
  server: https://www.justnainai.com
  secret: XXXXXX

oidc:
  secret: 'd52c3f7f89c84e8da2bd946c2e6f59fa'
  privateKey: |
    -----BEGIN RSA PRIVATE KEY-----
XXXXXX
    -----END RSA PRIVATE KEY-----

clients:
  test:
    secret: foobar
    redirectURIs:
      - 'https://sso.justnainai.com/callback'



呆滞中

redirectURIs一般是根据oidc的使用者,例如我这里写的是synctv的地址,你可能需要写logto的地址,反正不会是distrust的地址。