惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
C
Check Point Blog
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG

博客园 - aozima

使用API查询rcvps.cn的主机流量 zabbix监控MinIO zabbix监控gestetner GS3021打印机 zabbix监控DCP-7180打印机 zabbix监控m232dw打印机 给Snipe-IT添加扫码盘点 gitlab禁止用户自己删除帐号 多年前旧笔记本惠普CQ40升级记录 关闭 gitlab中的 letsencrypt thinkphp5自定义sql排序 nginx自带的webdav掉坑计 获取上个程序的返回值 修改 ls 命令的时间显示格式 使用CURL测量网络延时 测试 tls 1.3 阿里云共享上网 tensorflow-gpu 1.13 提示找不到 libcublas.so.10.0 的问题 阿里云不同帐号间内网互通 R410自带SAS6IR卡折腾记
Snipe-IT支持Oauth2登录
aozima · 2025-11-16 · via 博客园 - aozima

Snipe-IT默认支持的第3方登录为:SAML 和 Google Workspace。

不支持添加自定义Oauth2登录。

查了相关文档,

并用casdoor作为idp测试了SAML并没有成功,加上第1次用SAML且比较复杂,不想继续调试。

看到相关讨论

于是直接小修改几个源码就可以实现自定义Oauth登录了


更新参数检查

app/Models/Setting.php 删除参数限制,原来只支持google

           'thumbnail_max_h'                     => 'numeric|max:500|min:25',
-          'google_client_id'                    => 'nullable|ends_with:apps.googleusercontent.com'

修改URL及JWT

vendor/laravel/socialite/src/Two/GoogleProvider.php

     protected function getAuthUrl($state)
     {
-        return $this->buildAuthUrlFromBase('https://accounts.google.com/o/oauth2/auth', $state);
+        return $this->buildAuthUrlFromBase('https://xxx.com/login/oauth/authorize', $state);
     }

     protected function getTokenUrl()
     {
-        return 'https://www.googleapis.com/oauth2/v4/token';
+        return 'https://xxx.com/api/login/oauth/access_token';
     }

     protected function getUserByToken($token)
     {
-        if ($this->isJwtToken($token)) {
-            return $this->getUserFromJwtToken($token);
-        }
-
-        $response = $this->getHttpClient()->get('https://www.googleapis.com/oauth2/v3/userinfo', [
-            RequestOptions::QUERY => [
-                'prettyPrint' => 'false',
-            ],
-            RequestOptions::HEADERS => [
-                'Accept' => 'application/json',
-                'Authorization' => 'Bearer '.$token,
-            ],
+        $response = $this->getHttpClient()->get('https://xxx.com/api/userinfo', [
+            RequestOptions::QUERY => ['access_token' => $token],
         ]);
 
         return json_decode((string) $response->getBody(), true);
     }