くりにっき

フルスタックキュアエンジニアです

omniauth-chatworkを作った

github.com

なんのgem?

最近ChatWorkでOAuth認証に対応したのですが、それに対応したomniauthのproviderです

使い方

OAuthクライアントの登録

まず最初に下記を参考にOAuthクライアントを作ってください

developer.chatwork.com

blog-ja.chatwork.com

この時リダイレクトURIhttps://〜/outh/chatwork の形式にしてください。

f:id:sue445:20171116165200p:plain

https://127.0.0.1:4567/ も登録しているのはローカルでの確認用です。

余談ですが2週間位前に https://localhost:4567/ で登録しようとすると「https://example.com形式で登録してください」的なエラーが出たのでその時は https://127.0.0.1:4567で登録して回避しました。

今確認したら https://localhost:4567/で登録できるようになっていたので今はどっちでもいいと思います。

omniauth-chatworkをproviderとして組み込む

あとは omniauth-facebookomniauth-twitter と同様に下記のような感じでproviderを登録してください

use OmniAuth::Builder do
  provider :chatwork, ENV["CLIENT_ID"], ENV["CLIENT_SECRET"]

  # scopeを明示的に指定したい場合はこっち
  provider :chatwork, ENV["CLIENT_ID"], ENV["CLIENT_SECRET"], scope: ["users.all:read", "rooms.all:read_write", "contacts.all:read_write"]
end

確認してないけどRailsなら config/initializers/omniauth.rb をこんな風に書いておけばたぶん動きます。

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :chatwork, ENV["CLIENT_ID"], ENV["CLIENT_SECRET"]
end

技術的なこと

ローカルでのSSL確認時はwebrick使うのが便利だった

http://developer.chatwork.com/ja/oauth.html にも書いてますがリダイレクトURIhttpsである必要があります。これは当然ローカルでの確認時にもhttpsが要求されます

ググるHTTPS証明書を作成してローカルで起動したApacheに喰わせて云々っていう記事が出ますが、Rubyならwebrickで下記のような設定を書いておけば起動時にオレオレ証明書を動的生成してくれるのでそんな心配はありません

set :server_settings,
    SSLEnable: true,
    SSLCertName: [["CN", WEBrick::Utils.getservername]]

https://github.com/sue445/omniauth-chatwork/blob/v0.1.0/spec/dummy/app.rb

実際ローカルでOAuth認証確認する時はomniauth-chatworkのリポジトリをcloneして bundle exec ruby spec/dummy/app.rb で動きます

参考資料

omniauth provider作成時に参考にしたもの

今までOAuth2のクライアントライブラリ使わずにゴリゴリ自前実装してきたので、omniauthのルールに則ってgemを作るってのが新鮮でした

追伸

SAML連携してるChatWorkアカウントだとOAuth認証が非常に分かりづらいのでそれはまた後日書きます

-> 書いた

sue445.hatenablog.com