gitlab 设置 oauth2 登录

技术 置顶 精帖
0 1,002
peng49
peng49 2022-04-20 18:12:03
 

编辑 /etc/gitlab/gitlab.rb

  1. gitlab_rails['omniauth_enabled'] = true
  2. # 开启allow_single_sign_on,对于没有注册账户的用户将会在gitlab中自动创建账户
  3. gitlab_rails['omniauth_allow_single_sign_on'] = ['oauth2_generic']
  4. # 开启block_auto_created_users,则自动注册的账户是被锁定的,需要管理员账户手动的为这些账户解锁,因此此处将其设置为false
  5. gitlab_rails['omniauth_block_auto_created_users'] = false
  6. gitlab_rails['omniauth_providers'] = [
  7. {
  8. 'name' => 'oauth2_generic',
  9. 'label' => 'OA',
  10. 'app_id' => '应用Id',
  11. 'app_secret' => '应用秘钥',
  12. 'args' => {
  13. 'client_options' => {
  14. 'site' => 'http://192.168.168.149:8001',
  15. # 认证登录url
  16. 'authorize_url' => '登录页面 url,如:http://192.168.168.149:8001/login',
  17. 'token_url' => '通过授权code获取token 接口,如:http://192.168.168.149:8001/getTokenByCode',
  18. 'user_info_url' => '获取用户信息接口,如:http://192.168.168.149:8001/userInfo'
  19. },
  20. # 属性对应关系
  21. 'user_response_structure' => {
  22. 'root_path' => [],
  23. 'id_path' => ['data', 'username'],
  24. 'attributes' => {
  25. # 对应获取用户信息接口返回的 data.username
  26. 'username' => ['data', 'username'],
  27. 'name' => ['data', 'name'],
  28. 'email' => ['data','email']
  29. }
  30. },
  31. 'strategy_class' => 'OmniAuth::Strategies::OAuth2Generic'
  32. }
  33. }
  34. ]

配置完成后

  1. sudo gitlab-ctl reconfigure

重新生成配置文件

  1. sudo gitlab-ctl restart

重新启动

可以看到登录页面出现了一个新按钮,按钮文本就是上面配置的label的值,点击之后自动跳到认证中心登录

思考
可以在nginx中添加

  1. # 这个页面直接重定向到授权页面登录
  2. location /users/sign_in {
  3. rewrite .* http://192.168.168.149:8001/login?client_id={app_id}&redirect_uri={redirect_uri}
  4. }

直接重定向
或者在页面插入js代码,自动点击按钮登录
Module ngx_http_sub_module

  1. location /users/sign_in {
  2. set $script '<script>document.querySelector("#oauth-login-oauth2_generic").click()</script>';
  3. sub_filter '</body>' '${script}</body>';
  4. sub_filter_types *;
  5. }

参考
https://docs.gitlab.com/ee/integration/oauth2_generic.html

利用nginx实现web页面插入统计代码
nginx sub_filter替换内容失败

回帖
登录
忘记密码?