すえひろがりっっっっ! このページをアンテナに追加 RSSフィード

2013-05-30

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

開発環境として Gitlab、Jenkins、Redmine をセットで使っているのですが、それぞれにパスワードの設定が必要となって管理が面倒です。

アカウントを一つに統合したい。ということでやってみました。

環境

  • Redmine 2.3.0
  • Jenkins 1.499
  • Gitlab 5.2

方針

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

RedmineOAuth プロバイダの機能をつける

やりたいことに近いプラグインがあったのですが、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 へログインしようとすると RedmineOAuthリダイレクトさるようになります。

f:id:suer:20130530213038p:image

Gitlab の認証を OAuth に対応する

Gitlab は Omniauth でのログインに対応しているので、RedmineOAuth を使って認証するような 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 に適当なアイコンを置いておくと、こんなふうにログインフォームの下に RedmineOAuth へのリンクが設置されます。

f:id:suer:20130530210410p:image

まとめ

以上で Redmineアカウントパスワードを集約できました。

シングルサインオンとまではいかないまでも、一度 Redmineログインしてしまえば数クリックでそれぞれの環境にログインできるのでとても快適です。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証