首页 > 其他分享 >Gitlab接入Oauth2.0

Gitlab接入Oauth2.0

时间:2024-04-07 11:46:01浏览次数:34  
标签:name 接入 Gitlab sign entries oauth import Oauth2.0 email

配置

Gitlab 的 SSO 接入文档 OmniAuth Oauth2.0

添加Gitlab配置

里面包含的JWT配置后续再添加样例,可以忽略

gitlab_rails['omniauth_enabled'] = true  # 启用SSO配置
gitlab_rails['omniauth_auto_link_user'] = ["oauth2_generic"]  # 自动关联已经存在的账号
gitlab_rails['omniauth_allow_single_sign_on'] = ['oauth2_generic'] #跟下⾯的 name 对应,不建议修改
gitlab_rails['omniauth_block_auto_created_users'] = false # 是否⾃动创建账号,false 会,true 也会,但是新账号会被锁定
gitlab_rails['omniauth_providers'] = [
    {
        'name' => 'oauth2_generic', # 此处跟maxke配置的回调地址有关系
        'label': 'SSO', # 此处显示在 SSO 授权登录的名称
        'app_id' => '972885301678571520',
        'app_secret' => 'd90zMDMwNDIwMjQxMzAwNDg2NjUfzn',
        'args' => {
            client_options: {
                'site' => 'http://172.25.36.33:8080', # sso 认证端的域名
                'authorize_url'=>'/sign/authz/oauth/v20/authorize',  # 认证地址
                'token_url'=>'/sign/authz/oauth/v20/token',  # 获取Token地址
                'user_info_url' => '/sign/api/oauth/v20/me'  # 获取信息信息地址
            },
            user_response_structure: {
                root_path: [],
                id_path: ['email'], # 身份认证的关键字,注册用户时会把这个作为身份认证的标识
                attributes: { name: 'name', email: 'email', username:'username'}  # 其他属性
            },
            #name: 'maxkey',
            strategy_class: "OmniAuth::Strategies::OAuth2Generic"
        }
    },
    { name: "jwt",
      label: "JWT", # optional label for login button, defaults to "Jwt"
      args: {
        secret: "YOUR_APP_SECRET",
        algorithm: "HS256", # Supported algorithms: "RS256", "RS384", "RS512", "ES256", "ES384", "ES512", "HS256", "HS384", "HS512"
        uid_claim: "email",
        required_claims: ["name", "email"],
        info_map: { name: "name", email: "email" },
        auth_url: "http://10.2.1.13:8011/jwt/auth",
        valid_within: 3600 # 1 hour
      }
  }
]

默认回调地址

http://your-gitlab.host.com/users/auth/oauth2_generic/callback

oauth-server 模拟

这下面是个SpringMVC项目的Controller,需要跟上面的Gitlab配置相对应,如上配置:这个服务需要启动的地址为 http://172.25.36.33:8080

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.jwt.JWTUtil;
import lombok.SneakyThrows;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

@RestController
public class TTTT {

    String gitlabCallBack = "http://10.2.1.13:8000/users/auth/oauth2_generic/callback?code=11221";

    @RequestMapping("/sign/authz/oauth/v20/authorize")
    @SneakyThrows
    public void a(HttpServletRequest request, HttpServletResponse response) {
        Map<String, String[]> parameterMap = request.getParameterMap();
        response.sendRedirect(gitlabCallBack + "&state=" + request.getParameter("state"));
    }

    @RequestMapping("/sign/authz/oauth/v20/token")
    @SneakyThrows
    public Object toke(HttpServletRequest request, HttpServletResponse response) {
        Map<String, String[]> parameterMap = request.getParameterMap();
        JSONObject entries = JSONUtil.parseObj("{}");
        entries.append("access_token", "token");
        return entries;
    }

    @RequestMapping("/sign/api/oauth/v20/me")
    @SneakyThrows
    public Object info(HttpServletRequest request, HttpServletResponse response) {
        Map<String, String[]> parameterMap = request.getParameterMap();
        JSONObject entries = JSONUtil.parseObj("{}");
//        entries.append("realname", "simyr"); # 添加上这个会报错
        entries.putOnce("username", "simy");
        entries.putOnce("email", "[email protected]");
//        entries.putOnce("email", "[email protected]");
        entries.putOnce("name", "司马");
        return entries;
    }

    @RequestMapping("/jwt/auth")
    @SneakyThrows
    public void jwt(HttpServletRequest request, HttpServletResponse response) {
        HashMap<String, Object> map = new HashMap<>();
        map.put("name", "weiy");
        map.put("email", "[email protected]");
        map.put("iat", System.currentTimeMillis() / 1000);
        map.put("id", "111");
        String token = JWTUtil.createToken(map, "YOUR_APP_SECRET".getBytes(StandardCharsets.UTF_8));
        response.sendRedirect("http://10.2.1.13:8000/auth/jwt/callback?jwt=" + token);
    }
}

过程

  1. 从页面发起SSO登录请求

    image-20240407113048292

  2. 进入验证接口 /sign/authz/oauth/v20/authorize?state=state_uid

  3. 回调Gitlab 接口 /users/auth/oauth2_generic/callback?code=xxxx&state=state_uid

  4. 获取Token信息 /sign/authz/oauth/v20/token

  5. 获取用户信息 /sign/api/oauth/v20/me

    返回结果 :

    JSONObject entries = JSONUtil.parseObj("{}");
    //        entries.append("realname", "simyr"); # 添加上这个会报错
            entries.putOnce("username", "simy");
            entries.putOnce("email", "[email protected]");
    //        entries.putOnce("email", "[email protected]");
            entries.putOnce("name", "司马");
    

问题

Csrf detected错误

  • Q : 对接Oauth2.0时,回调后报错,错误信息: 无法通过 OAuth2Generic 对您进行身份验证,原因:"Csrf detected"。

    A: 因为回调地址中少了个参数state ,这个参数是从Gitlab传过来的,添加上即可

标签:name,接入,Gitlab,sign,entries,oauth,import,Oauth2.0,email
From: https://www.cnblogs.com/xysgo/p/18118747

相关文章

  • 配置交换机双归接入IP网络示例(V-STP方式推荐)
    组网需求如图4-23所示,通过配置M-LAG双归接入IP网络可以满足以下要求:当一条接入链路发生故障时,流量可以快速切换到另一条链路,保证可靠性。为了高效利用带宽,两条链路同时处于active状态,可实现使用负载分担的方式转发流量。图4-23 配置M-LAG双归接入IP组网图配置思......
  • 配置M-LAG双归接入普通以太网络示例(根桥方式)
    组网需求如图4-22所示,采用M-LAG方式将主机双归接入普通以太网络。由于用户对于业务的可靠性要求很高,如果主机和接入设备之间做链路聚合只能保证链路级的可靠性,接入设备发生故障时则会导致业务中断。这时用户可以采用跨设备链路聚合技术,正常工作时链路进行负载分担且任何一台......
  • 电信aep—Ctwing平台使用笔记——mqttfx接入电信aep实现数据上传、命令下发。
    最近搞了电信平台,记录一下目录1.创建产品2.添加设备3.记录以下信息4.打开mqttfx​编辑5.试试​编辑6.建立属性7.建立服务8.打开mqttfx,输入主题与报文9.上传10指令下发1.创建产品2.添加设备3.记录以下信息4.打开mqttfx参数填写规则:1.BrokerAddress:从设......
  • 在微信小程序中实现银行支付接入的技术实践
    在微信支付的大力普及下,手续费率也是大家最大的困扰,交易量比较小还可以忍受,但是一天几十万、几百万甚至几千万的交易金额,手续费就会成为商家的最大困扰。再客户极力的推荐增加银行支付接口,我们经过几个月的对接,终于把招商银行、农业银行、工商银行、建设银行的支付接口接入到小......
  • 10秒钟用python接入讯飞星火API(保姆级)
    正文:        科大讯飞是中国领先的人工智能公众公司,其讯飞星火API为开发者提供了丰富的接口和服务,以支持各种语音和语言技术的应用。步骤一:注册账号并创建应用首先,您需要访问科大讯飞开放平台官网,注册一个账号。注册完成后,登录账号,在控制台中创建一个新应用。创建......
  • 玩转云端 | 网络也i人?咋变显眼包?天翼云AccessOne边缘接入来了!
    你是具有“社牛”属性的“e人”还是“社恐”属性的“i人”?在年轻群体中火起来的“MBTI人格测试”中“i”代表intraversion(内倾型)“e”则代表extraversion(外倾型)也就是大家平时所说的内向和外向在征服internet的道路上总有些痛是i人和e人都无法承受的……比如,网络连接比i......
  • Gitlab渗透的深入利用及知识点总结
    一、版本探测http://url/assets/webpack/manifest.json 将该json与GitHub某个数据库比对https://github.com/righel/gitlab-version-nse/blob/main/gitlab_hashes.json获取对应的版本信息二、常见漏洞给一个大佬总结的很全的清单:https://www.moonsec.com/7495.html这里......
  • 【漏洞复现】海康威视频编码设备接入网关存在信息泄露漏洞
    一、漏洞简介杭州海康威视数字技术股份有限公司视频编码设备接入网关存在信息泄露漏洞,攻击者可利用该漏洞获取敏感信息。二、影响版本HIKVISION-视频编码设备接入网关三、资产测绘fofa:app="HIKVISION-视频编码设备接入网关"特征四、漏洞复现地址>>>漏洞详情及批量......
  • 海康Ehome2.0与5.0设备接入EasyCVR视频汇聚平台时的配置区别
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的......
  • docker-gitlab-ce-未完
    1、拉取gitlab镜像dockerpullgitlab/gitlab-ce:latest2、创建映射文件mkdir-p/docker_server/gitlab/etcmkdir-p/docker_server/gitlab/logmkdir-p/docker_server/gitlab/dataetc映射保存配置文件,log存储日志,data存储数据文件/docker_server/gitlab/etc/gitlab.r......