reona.dev

認可・認証の概要まとめ


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

となっております。

認可 とは、

  • 所有リソースに対するアクセス権を代理人に与えること
  • アクセス権を与えられた代理人によるリソースの操作を可能とする鍵を渡すようなイメージ

認証 とは、

  • 本人であることの証明を得ること
  • ID カードなどの本人が特定できる証明書によるものなどがある
  • ポピュラーなものだと iPhone の指紋認証や FaceID による顔認証システムなど

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 を使って自分で実装することになりそうなので、非常に楽しみです。