Pages - Menu

Pages - Menu

Pages

2018年6月11日月曜日

Redmine・Gitlab・Jenkins のログインパスワードの管理が大変になったので OAuth 化した

勉強の為に転載しました。
http://d.hatena.ne.jp/suer/20130530/redmine_oauth

2013-05-30

Redmine・Gitlab・Jenkins のログインパスワードの管理が大変になったので OAuth 化したAdd Stardoboccho

開発環境として Gitlab、Jenkins、Redmine をセットで使っているのですが、それぞれにパスワードの設定が必要となって管理が面倒です。
アカウントを一つに統合したい。ということでやってみました。

環境

  • Redmine 2.3.0
  • Jenkins 1.499
  • Gitlab 5.2

方針

Redmine にプラグインで OAuth プロバイダの機能を追加し、Redmine のアカウントで Jenkins と Gitlab へログインできるようにします。

Redmine に OAuth プロバイダの機能をつける

やりたいことに近いプラグインがあったのですが、Rails3 以降の Redmineに対応していなかったので、fork して、ついでに日本語化しておきました。
http://redmine.root.url/oauth_clients/ にアクセスすると OAuth の consumer key を発行できるようになります。
f:id:suer:20130530210412p:image
f:id:suer:20130530213320p:image

Jenkins の認証を OAuth に対応する

@mallowlabs さんがあっさり作ってくれました。
Jenkins へログインしようとすると Redmine の OAuth へリダイレクトさるようになります。
f:id:suer:20130530213038p:image

Gitlab の認証を OAuth に対応する

Gitlab は Omniauth でのログインに対応しているので、Redmine の OAuthを使って認証するような Strategy を書いて config/initializers に突っ込みました。
こんなふうに書いています。

module OmniAuth
  module Strategies
    class Redmine < OmniAuth::Strategies::OAuth
      option :client_options, {
        :authorize_url => 'https://dev.example.com/redmine/oauth/authorize',
        :request_token_url => 'https://dev.example.com/redmine/oauth/request_token',
        :access_token_url => 'https://dev.example.com/redmine/oauth/access_token'
      }

      uid { raw_info['user']['id'] }

      info do
        {
          'nickname' => raw_info['user']['mail'],
          'email' => raw_info['user']['mail'],
          'name' => "#{raw_info['user']['lastname']} #{raw_info['user']['firstname']}"
        }
      end

      def raw_info
        @raw_info ||= MultiJson.decode(access_token.get("https://dev.example.com/redmine/oauth/user_info.json").body)
      end
    end
  end
end
Omniauth の Strategy の書き方はこちら。
さらに、assets/authbuttons/redmine_32.png に適当なアイコンを置いておくと、こんなふうにログインフォームの下に Redmine の OAuth へのリンクが設置されます。
f:id:suer:20130530210410p:image

まとめ

以上で Redmine のアカウントパスワードを集約できました。
シングルサインオンとまではいかないまでも、一度 Redmine にログインしてしまえば数クリックでそれぞれの環境にログインできるのでとても快適です。

0 件のコメント:

コメントを投稿