每日签到
奶昔超市
积分商城
奶昔访达
添加到桌面
收藏本站
切换到宽版
板块
NaixiBBS
扩展
Fun
登录
注册
奶昔论坛
»
板块
›
内容区
›
技术
›
借助Casdoor+OAuth2-Proxy实现类Cloudflare Access功能 ...
返回列表
发布新帖
查看:
97
|
回复:
2
[运维]
借助Casdoor+OAuth2-Proxy实现类Cloudflare Access功能(宝塔面板)
nyarime
nyarime
当前离线
积分
5716
雷达卡
发表于
昨天 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)
重装完后到终端执行nginx -V,就发现已经有了。那就可以在宝塔面板上创建了你的网站
部署OAuth2-Proxy对接Casdoor
假设你已经有了IdP(奶昔SSO)后,并已经创建了网站。在确保能访问的情况下,我们先搓一下OAuth2-Proxy。
这里我用 o2p.naixi.net 作为域名,确保访问
https://o2p.naixi.net
可以正常打开后再来添加反代。使用宝塔默认的反向代理,以本帖为例我绑定的是4180端口就写127.0.0.1:4180,其他默认就好
要使用OAuth2-Proxy首先需要写下配置文件。这边参考
官方文档
直接用二进制,我在
别人的博客
看到了密密麻麻的启动参数,还以为我在docker run。不过以
官方OIDC的案例
是可以用一个文本写配置的。我把它叫naixi.cfg,先在奶昔SSO(Casdoor)上创建好应用,然后参考如下内容写配置:
#OAuth2-Proxy开在4180端口,为了避免暴露公网用127.0.0.1
http_address="127.0.0.1:4180"
# 表示 Oauth2-Proxy 运行在反向代理之后,使用 X-Real-IP 头,并允许X-Forwarded-{Proto,Host,Uri}在重定向选择上使用
reverse_proxy=true
# 使用 openssl rand -base64 16 生成
cookie_secret="NYARIMEYesIArkAreYouOK=="
# Cookies 限定域
cookie_domains=".naixi.net"
# 配置Provider为OIDC类型
provider="oidc"
# 配置Provider名称
provider_display_name="Naixi SSO"
client_id="应用id"
client_secret="应用私钥"
# Casdoor授权完成后的回调地址
# /oauth2/callback 是 oauth2-proxy 提供的接口
redirect_url="https://o2p.naixi.net/oauth2/callback"
# Casdoor地址
oidc_issuer_url="https://auth.naixi.net"
# 域名白名单(可选)
whitelist_domains=".naixi.net"
# 限定邮箱后缀
email_domains=["*"]
复制代码
保存后可以在终端执行
oauth2-proxy --config naixi.cfg
复制代码
启动后再次访问
https://o2p.naixi.net
显示OAuth2-Proxy则表示启动成功
接下来先Ctrl+C关掉,然后再用宝塔的进程守护管理器保持就行(screen也行,但这个可以开机自启动)
启动好后保险起见,还可以再访问下
https://o2p.naixi.net
,能打开就表示OAuth2-Proxy搞定。然后再点一下,试试可否顺利加载Casdoor的登录框,若有回调错误可按照报错的URI加入Casdoor应用的Redirect URI。以本帖为例,添加的是
https://o2p.naixi.net/oauth2/callback
登录后若凭据在有效期内,将显示404。因此建议用无痕浏览器调试!
为网站启用OAuth2-Proxy验证
以 search.naixi.net (最近在玩的SearXNG)为例,由于自建搜索引擎会有违规内容导致被墙的风险,因此只对奶油开放。首先打开网站详情,然后选择配置文件,启用auth_request
auth_request /oauth2/auth;
error_page 401 = https://o2p.naixi.net/oauth2/sign_in?rd=$scheme://$host$request_uri;
复制代码
接着创建一个反向代理,这里创建一个占位就行。由于SearXNG是用Docker部署的,因此我已经反代过8180端口,这里不用管它。
创建好后点配置文件,然后删掉那些。输入下面的代码:
#PROXY-START/
location ^~ /oauth2/ {
proxy_pass http://127.0.0.1:4180; # Change this to the "--http-address" configured in step II.6
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Auth-Request-Redirect $request_uri;
# or, if you are handling multiple domains:
# proxy_set_header X-Auth-Request-Redirect $scheme://$host$request_uri;
}
location = /oauth2/auth {
proxy_pass http://127.0.0.1:4180; # Change this to the "--http-address" configured in step II.6
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header Content-Length "";
proxy_pass_request_body off;
}
location ^~ /
{
proxy_pass http://127.0.0.1:8180;# Change this to your app's url
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1;
# proxy_hide_header Upgrade;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
set $static_filefp9pXqS2 0;
if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
{
set $static_filefp9pXqS2 1;
expires 1m;
}
if ( $static_filefp9pXqS2 = 0 )
{
add_header Cache-Control no-cache;
}
}
#PROXY-END/
复制代码
如果网站不是Docker部署的,那就把
location ^~ /
开始到
#PROXY-END/
之前的删完即可,删完后如下:
#PROXY-START/
location ^~ /oauth2/ {
proxy_pass http://127.0.0.1:4180; # Change this to the "--http-address" configured in step II.6
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Auth-Request-Redirect $request_uri;
# or, if you are handling multiple domains:
# proxy_set_header X-Auth-Request-Redirect $scheme://$host$request_uri;
}
location = /oauth2/auth {
proxy_pass http://127.0.0.1:4180; # Change this to the "--http-address" configured in step II.6
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header Content-Length "";
proxy_pass_request_body off;
}
#PROXY-END/
复制代码
上面的#PROXY-START/和#PROXY-END/是宝塔面板用于读取反代规则所引用的限定头尾,这个需要保留。
此时访问您的用户在登录您的服务时会经历以下过程:在浏览器中打开 URL -> 仅看到需要登录的页面,包括名为“使用 Naixi SSO 登录”的按钮 -> 单击按钮并被重定向到您的 Casdoor 地址,他们将被要求登录 -> 用户输入他们的用户名和密码,Casdoor 验证他们的凭据 -> 自动重定向回您的 URL -> 成功访问您的服务 -> 用户在以下情况下将被要求再次登录您设置的时间将过期。
爱生活,爱奶昔~
回复
使用道具
举报
照妖镜
Clutter
Clutter
当前离线
积分
948
雷达卡
发表于
昨天 05:54
来自手机
|
查看全部
辛苦
爱生活,爱奶昔~
回复
使用道具
举报
照妖镜
tomcruise
tomcruise
当前离线
积分
7178
雷达卡
发表于
昨天 13:48
|
查看全部
技术帖,学习了。感谢
爱生活,爱奶昔~
回复
支持
反对
使用道具
举报
照妖镜
返回列表
发布新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
相关网站
9eSIM
eSTKme
Xesim
eSIM.GG
RedteaGO
站内导航
RSS
Sitemap
CDK
SSO
更多...
站务支持
用户认证制度
User Verification System
获取邀请码
广告招商
联系支持
卡粉专属群
加入官方群
© 2025
Naixi Networks
.
沪ICP备13020230号-1
|
沪公网安备 31010702007642号
手机版
小黑屋
RSS
返回顶部
关灯
在本版发帖
快速回复
返回顶部
返回列表