RailsでSNS連携のAPIを実装する機会があり、認可・認証に関して勉強する機会があったので簡単に概要を書いていきます。認可・認証の技術ではOAuth・OpenID Connect等があります。これらについては以下の記事が図を用いて非常にわかりやすくまとめられています。
(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 | ○ | ○ |
となっております。
認可 とは、
- 所有リソースに対するアクセス権を代理人に与えること
- アクセス権を与えられた代理人によるリソースの操作を可能とする鍵を渡すようなイメージ
認証 とは、
- 本人であることの証明を得ること
- IDカードなどの本人が特定できる証明書によるものなどがある
- ポピュラーなものだとiPhoneの指紋認証やFaceIDによる顔認証システムなど
SNSを利用したアカウント登録処理の一例としては以下のとおりです。
- ユーザーがSNSを用いたアカウント登録をクライアントアプリに要求する(e.g. [Twitterでアカウント登録]ボタン押下)
- クライアントAPIがSNSの認可サーバーにアクセストークン(リソース操作を可能にする鍵)を要求する
- ユーザーがSNSログインをすることで、認可サーバーがアクセストークンを発行(認可処理)
- アクセストークンがクライアントAPIからサーバーサイドAPIに渡される
- ユーザー情報取得のエンドポイントにアクセスし、取得した情報を元にアカウントを作成し永続化する
- JWTが発行され、クライアントアプリに渡される
JWTは JSON Web Token
の略で、発行してクライアントに返すことでSession IDをサーバーで保管する必要がなくなります。詳しく落とし込めていない部分もあるので、別途記事にまとめたいですね…
Twitter, Facebook, Googleで実装や再現方法に関してもバラバラだったので、それらに関しても個別でまとめていきたいと思います。
以上、認可・認証に関する簡単なまとめでした。特にRailsに関しては、あまり仕組みを知らずともDeviceやOmniauth等のGemがよしなにSNS連携の機能を実現してくれるので、今回はそれらを使わずに機能を実装したことで非常に勉強になりました。今回作ったAPIに対応するクライアントAPIもSwiftを使って自分で実装することになりそうなので、非常に楽しみです。