我们已经设置了Gitlab并且运行良好。我们有自己想要连接的oAuth2服务器,所以只有那些在我们的oAuth2服务器上拥有帐户的服务器才能访问Gitlab。
我们安装了omniauth-oauth2(https://rubygems.org/gems/omniauth-oauth2)并在gitlab.yml中启用了它,如下所示:
omniauth:
enabled: true
providers:
- { name: 'oauth2' }
当我们重新启动gitlab时,我们在登录页面上看到OAuth2按钮,但是我们的oauth2服务器的URL是错误的,我们还没有设置app_id和app_secret。
我的问题是:如何通过此设置文件传递app_id,app_secret和oauth2服务器URL的参数和相关数据。到目前为止,我们已经尝试了很多东西,但还没有走得太远。
注意:
答案 0 :(得分:1)
要使用我们自己的oAuth服务器,我们必须编写自己的策略来实现omniauth,并通过Gemfile导入它。 oAuth URL在此策略中。然后,我们将oAuth密钥放在/home/git/gitlab/config/initializers/devices.rb文件中,然后在最后一个'结束之前。语句:
end
config.omniauth :strategy_name, "{client_id_goes_here}", "{client_key_goes_here}"
end
我们的策略看起来像这样,用您的策略名称替换Strategy_name,并用您自己的URL替换site,authorize_url和token_url:
require 'omniauth-oauth2'
module OmniAuth
module Strategies
class Strategy_name < OmniAuth::Strategies::OAuth2
option :client_options, {
:site => 'https://authserve.mydomain.com',
:authorize_url => 'https://authserve.mydomain.com/oauth/authorize',
:token_url => '/oauth/access_token'
}
def request_phase
super
end
def authorize_params
super.tap do |params|
%w[scope client_options].each do |v|
if request.params[v]
params[v.to_sym] = request.params[v]
end
end
end
end
uid { raw_info['id'].to_s }
info do
{
:email => raw_info['email'],
:name => raw_info['name'],
:nickname => raw_info['username']
}
end
extra do
{:raw_info => raw_info}
end
def raw_info
@raw_info ||= access_token.get("/v1/users?access_token=#{access_token.token}").parsed
end
end
end
end