RailsでSNS連携のAPIを実装する機会があり、認可・認証に関して勉強する機会があったので簡単に概要を書いていきます。認可・認証の技術ではOAuth・OpenID Connect等があります。これらについては以下の記事が図を用いて非常にわかりやすくまとめられています。

(Qiita) 一番分かりやすい OAuth の説明

(Qiita) 一番分かりやすい OpenID Connect の説明

業務ではTwitter・Facebook・Googleの連携機能をサーバーサイドAPIとして実装しました。具体的には、取得したユーザー情報を用いてアカウント登録・ログイン、またログインができるように連携をする機能を追加しました。

TwitterではOAuth 1.0, FacebookではOAuth 2.0, GoogleではOpenID Connectが使われています。(実現したい機能によっては異なる場合もあります。)

これらを分類すると、

認可認証
OAuth 1.0
OAuth 2.0
OpenID Connect

となっております。

認可 とは、

認証 とは、

SNSを利用したアカウント登録処理の一例としては以下のとおりです。

  1. ユーザーがSNSを用いたアカウント登録をクライアントアプリに要求する(e.g. [Twitterでアカウント登録]ボタン押下)
  2. クライアントAPIがSNSの認可サーバーにアクセストークン(リソース操作を可能にする鍵)を要求する
  3. ユーザーがSNSログインをすることで、認可サーバーがアクセストークンを発行(認可処理)
  4. アクセストークンがクライアントAPIからサーバーサイドAPIに渡される
  5. ユーザー情報取得のエンドポイントにアクセスし、取得した情報を元にアカウントを作成し永続化する
  6. JWTが発行され、クライアントアプリに渡される

JWTは JSON Web Token の略で、発行してクライアントに返すことでSession IDをサーバーで保管する必要がなくなります。詳しく落とし込めていない部分もあるので、別途記事にまとめたいですね… Twitter, Facebook, Googleで実装や再現方法に関してもバラバラだったので、それらに関しても個別でまとめていきたいと思います。

以上、認可・認証に関する簡単なまとめでした。特にRailsに関しては、あまり仕組みを知らずともDeviceやOmniauth等のGemがよしなにSNS連携の機能を実現してくれるので、今回はそれらを使わずに機能を実装したことで非常に勉強になりました。今回作ったAPIに対応するクライアントAPIもSwiftを使って自分で実装することになりそうなので、非常に楽しみです。