每日签到奶昔超市积分商城奶昔访达
返回列表 发布新帖
查看: 97|回复: 2

[运维] 借助Casdoor+OAuth2-Proxy实现类Cloudflare Access功能(宝塔面板)

发表于 昨天 05:12 | 查看全部 |阅读模式

欢迎注册论坛,享受更多奶昔会员权益!

您需要 登录 才可以下载或查看,没有账号?注册

×
其实可以直接套Cloudflare Access(现在合并到Zero Trust功能了),Cloudflare Access 的作用是在无需传统VPN 的情况下可保护内部应用和资源,然而奶油在奶昔SSO点那个Cloudflare后注册量达到100用户后就爆了。好嘛,那就自己搓一个类似于Cloudflare Access的功能,即在Nginx层面给任意项目站点增加访问限制,也就是推出奶油专属的服务。
这个在nmQu实现过,只不过Any-Proxy是基于PHP的因此引入一个OIDC鉴权就行。不管老牌KeyCloak以及奶昔SSO用的Casdoor,总之都是以OIDC标准实现的。因此我们需要用到OAuth2-Proxy完成鉴权,并告知NGINX这个是符合资格的用户。不过这个方法也有缺点,除非你是ALL IN BOOM否则你得弄一堆OAuth2-Proxy,不知道为啥写公网地址会500错误。

确认你的NGINX具备auth_request
终端执行nginx -V看到--with-http_auth_request_module就是有,宝塔用户默认都没有。因此需要卸载NGINX(重装会保留配置)再选择编译安装,然后添加自定义选装模块如下图,添加自定义模板参数写--with-http_auth_request_module,模块名随意填写(如auth_request)
fakename.png
重装完后到终端执行nginx -V,就发现已经有了。那就可以在宝塔面板上创建了你的网站
fakename.png

部署OAuth2-Proxy对接Casdoor
假设你已经有了IdP(奶昔SSO)后,并已经创建了网站。在确保能访问的情况下,我们先搓一下OAuth2-Proxy。
这里我用 o2p.naixi.net 作为域名,确保访问 https://o2p.naixi.net 可以正常打开后再来添加反代。使用宝塔默认的反向代理,以本帖为例我绑定的是4180端口就写127.0.0.1:4180,其他默认就好
fakename.png
要使用OAuth2-Proxy首先需要写下配置文件。这边参考官方文档直接用二进制,我在别人的博客看到了密密麻麻的启动参数,还以为我在docker run。不过以官方OIDC的案例是可以用一个文本写配置的。我把它叫naixi.cfg,先在奶昔SSO(Casdoor)上创建好应用,然后参考如下内容写配置:
  1. #OAuth2-Proxy开在4180端口,为了避免暴露公网用127.0.0.1
  2. http_address="127.0.0.1:4180"
  3. # 表示 Oauth2-Proxy 运行在反向代理之后,使用 X-Real-IP 头,并允许X-Forwarded-{Proto,Host,Uri}在重定向选择上使用
  4. reverse_proxy=true
  5. # 使用 openssl rand -base64 16 生成
  6. cookie_secret="NYARIMEYesIArkAreYouOK=="
  7. # Cookies 限定域
  8. cookie_domains=".naixi.net"
  9. # 配置Provider为OIDC类型
  10. provider="oidc"
  11. # 配置Provider名称
  12. provider_display_name="Naixi SSO"
  13. client_id="应用id"
  14. client_secret="应用私钥"
  15. # Casdoor授权完成后的回调地址
  16. # /oauth2/callback 是 oauth2-proxy 提供的接口
  17. redirect_url="https://o2p.naixi.net/oauth2/callback"
  18. # Casdoor地址
  19. oidc_issuer_url="https://auth.naixi.net"
  20. # 域名白名单(可选)
  21. whitelist_domains=".naixi.net"
  22. # 限定邮箱后缀
  23. email_domains=["*"]
复制代码
保存后可以在终端执行
  1. oauth2-proxy --config naixi.cfg
复制代码
启动后再次访问 https://o2p.naixi.net 显示OAuth2-Proxy则表示启动成功
fakename.png
接下来先Ctrl+C关掉,然后再用宝塔的进程守护管理器保持就行(screen也行,但这个可以开机自启动)
fakename.png
启动好后保险起见,还可以再访问下 https://o2p.naixi.net,能打开就表示OAuth2-Proxy搞定。然后再点一下,试试可否顺利加载Casdoor的登录框,若有回调错误可按照报错的URI加入Casdoor应用的Redirect URI。以本帖为例,添加的是https://o2p.naixi.net/oauth2/callback
fakename.png
登录后若凭据在有效期内,将显示404。因此建议用无痕浏览器调试!
fakename.png

为网站启用OAuth2-Proxy验证
以 search.naixi.net (最近在玩的SearXNG)为例,由于自建搜索引擎会有违规内容导致被墙的风险,因此只对奶油开放。首先打开网站详情,然后选择配置文件,启用auth_request
  1. auth_request /oauth2/auth;
  2. error_page 401 = https://o2p.naixi.net/oauth2/sign_in?rd=$scheme://$host$request_uri;
复制代码
fakename.png
接着创建一个反向代理,这里创建一个占位就行。由于SearXNG是用Docker部署的,因此我已经反代过8180端口,这里不用管它。
fakename.png
创建好后点配置文件,然后删掉那些。输入下面的代码:
  1. #PROXY-START/

  2. location ^~ /oauth2/ {

  3.         proxy_pass       http://127.0.0.1:4180; # Change this to the "--http-address" configured in step II.6

  4.         proxy_set_header Host                    $host;
  5.         proxy_set_header X-Real-IP               $remote_addr;
  6.         proxy_set_header X-Scheme                $scheme;

  7.         proxy_set_header X-Auth-Request-Redirect $request_uri;
  8.         # or, if you are handling multiple domains:
  9.         # proxy_set_header X-Auth-Request-Redirect $scheme://$host$request_uri;
  10.     }
  11.     location = /oauth2/auth {
  12.         
  13.         proxy_pass       http://127.0.0.1:4180; # Change this to the "--http-address" configured in step II.6

  14.         proxy_set_header Host             $host;
  15.         proxy_set_header X-Real-IP        $remote_addr;
  16.         proxy_set_header X-Scheme         $scheme;
  17.         proxy_set_header Content-Length   "";
  18.         proxy_pass_request_body           off;
  19.     }
  20.     location ^~ /
  21. {
  22.     proxy_pass http://127.0.0.1:8180;# Change this to your app's url
  23.     proxy_set_header Host $host;
  24.     proxy_set_header X-Real-IP $remote_addr;
  25.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  26.     proxy_set_header REMOTE-HOST $remote_addr;
  27.     proxy_set_header Upgrade $http_upgrade;
  28.     proxy_set_header Connection $connection_upgrade;
  29.     proxy_http_version 1.1;
  30.     # proxy_hide_header Upgrade;

  31.     add_header X-Cache $upstream_cache_status;
  32.     #Set Nginx Cache

  33.     set $static_filefp9pXqS2 0;
  34.     if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
  35.     {
  36.         set $static_filefp9pXqS2 1;
  37.         expires 1m;
  38.     }
  39.     if ( $static_filefp9pXqS2 = 0 )
  40.     {
  41.         add_header Cache-Control no-cache;
  42.     }
  43. }

  44. #PROXY-END/
复制代码
如果网站不是Docker部署的,那就把location ^~ /开始到#PROXY-END/之前的删完即可,删完后如下:
  1. #PROXY-START/
  2. location ^~ /oauth2/ {

  3.         proxy_pass       http://127.0.0.1:4180; # Change this to the "--http-address" configured in step II.6

  4.         proxy_set_header Host                    $host;
  5.         proxy_set_header X-Real-IP               $remote_addr;
  6.         proxy_set_header X-Scheme                $scheme;

  7.         proxy_set_header X-Auth-Request-Redirect $request_uri;
  8.         # or, if you are handling multiple domains:
  9.         # proxy_set_header X-Auth-Request-Redirect $scheme://$host$request_uri;
  10.     }
  11.     location = /oauth2/auth {
  12.         
  13.         proxy_pass       http://127.0.0.1:4180; # Change this to the "--http-address" configured in step II.6

  14.         proxy_set_header Host             $host;
  15.         proxy_set_header X-Real-IP        $remote_addr;
  16.         proxy_set_header X-Scheme         $scheme;
  17.         proxy_set_header Content-Length   "";
  18.         proxy_pass_request_body           off;
  19.     }

  20. #PROXY-END/
复制代码
上面的#PROXY-START/和#PROXY-END/是宝塔面板用于读取反代规则所引用的限定头尾,这个需要保留。
此时访问您的用户在登录您的服务时会经历以下过程:在浏览器中打开 URL -> 仅看到需要登录的页面,包括名为“使用 Naixi SSO 登录”的按钮 -> 单击按钮并被重定向到您的 Casdoor 地址,他们将被要求登录 -> 用户输入他们的用户名和密码,Casdoor 验证他们的凭据 -> 自动重定向回您的 URL -> 成功访问您的服务 -> 用户在以下情况下将被要求再次登录您设置的时间将过期。
爱生活,爱奶昔~
回复

使用道具 举报

发表于 昨天 05:54 来自手机 | 查看全部
辛苦
爱生活,爱奶昔~
回复

使用道具 举报

发表于 昨天 13:48 | 查看全部
技术帖,学习了。感谢
爱生活,爱奶昔~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2025 Naixi Networks. 沪ICP备13020230号-1|沪公网安备 31010702007642号手机版小黑屋RSS
返回顶部 关灯 在本版发帖
快速回复 返回顶部 返回列表