如何在提供程序下的config / gitlab.yml中传递oAuth2服务器URL

时间:2014-11-13 01:44:02

标签: ruby oauth-2.0 gitlab

我们已经设置了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的参数和相关数据。到目前为止,我们已经尝试了很多东西,但还没有走得太远。

注意:

  • 本周之前我从未使用过Ruby。到目前为止学到了很多!
  • 我们尝试使用args设置其他args:{url: 'url-to-our-oauth2-server'}
  • 我相信我需要创建自己的策略文件,我计划根据提供的omniauth-oauth2策略文件进行操作

1 个答案:

答案 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