编辑 /etc/gitlab/gitlab.rb
gitlab_rails['omniauth_enabled'] = true
# 开启allow_single_sign_on,对于没有注册账户的用户将会在gitlab中自动创建账户
gitlab_rails['omniauth_allow_single_sign_on'] = ['oauth2_generic']
# 开启block_auto_created_users,则自动注册的账户是被锁定的,需要管理员账户手动的为这些账户解锁,因此此处将其设置为false
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_providers'] = [
{
'name' => 'oauth2_generic',
'label' => 'OA',
'app_id' => '应用Id',
'app_secret' => '应用秘钥',
'args' => {
'client_options' => {
'site' => 'http://192.168.168.149:8001',
# 认证登录url
'authorize_url' => '登录页面 url,如:http://192.168.168.149:8001/login',
'token_url' => '通过授权code获取token 接口,如:http://192.168.168.149:8001/getTokenByCode',
'user_info_url' => '获取用户信息接口,如:http://192.168.168.149:8001/userInfo'
},
# 属性对应关系
'user_response_structure' => {
'root_path' => [],
'id_path' => ['data', 'username'],
'attributes' => {
# 对应获取用户信息接口返回的 data.username
'username' => ['data', 'username'],
'name' => ['data', 'name'],
'email' => ['data','email']
}
},
'strategy_class' => 'OmniAuth::Strategies::OAuth2Generic'
}
}
]
配置完成后
sudo gitlab-ctl reconfigure
重新生成配置文件
sudo gitlab-ctl restart
重新启动
可以看到登录页面出现了一个新按钮,按钮文本就是上面配置的label
的值,点击之后自动跳到认证中心登录
思考:
可以在nginx中添加
# 这个页面直接重定向到授权页面登录
location /users/sign_in {
rewrite .* http://192.168.168.149:8001/login?client_id={app_id}&redirect_uri={redirect_uri}
}
直接重定向
或者在页面插入js代码,自动点击按钮登录
Module ngx_http_sub_module
location /users/sign_in {
set $script '<script>document.querySelector("#oauth-login-oauth2_generic").click()</script>';
sub_filter '</body>' '${script}</body>';
sub_filter_types *;
}
参考
https://docs.gitlab.com/ee/integration/oauth2_generic.html