🔐

OAuth と OpenID Connect について分かりやすくまとめてみる

2022/10/09に公開

今回は OAuth と OpenID Connect についてまとめてみます。

Togetter の SNS 認証を考えてみる

実例があると理解しやすいと思うので、まずは Togetter の SNS 認証について考えてみます。
Togetter を使ったことがない人でも大丈夫です。私も使ったことはありません笑

Togetter (トゥギャッター) とは「Twitter の投稿を特定の話題ごとに収集してまとめられるサービス」のことです。

ログイン時は Twitter アカウントを用いてログインします。いわゆる SNS 認証です。
ここでログイン画面の「このアプリケーションは次のことができます」の部分をよく見ると、リソースへのアクセス許可も行っていることが分かります。

site: https://togetter.com/

つまり認証と認可を同時に行っており、ID とパスワードを入力することで次のことを実現しています (認証と認可の違いについては「認証と認可の違いを分かりやすくまとめてみる」をご覧ください)。

  • Togetter に Twitter アカウントでログインする (認証)
  • Togetter による、ログインした Twitter アカウントのリソース (ツイートなど) へのアクセスを許可する (認可)

OAuth と OpenID Connect

このような異なるサービス間での認証・認可を考えたとき、OAuth と OpenID Connect の概念が出てきます。それぞれ一言で表すと次のように言えます。

  • OpenID Connect: 異なるサービス間での認証を実現する仕組みの標準
  • OAuth: 異なるサービス間での認可を実現する仕組みの標準

それぞれもう少し詳しく見てみます。

OAuth とは

OAuth は異なるサービス間での認証を実現する仕組みの標準です。
OAuth のフローを経ると、最終的にはアクセストークンが発行されます。

発行されたアクセストークンを利用することで、クライアントアプリ (例: Togetter) はサービスプロバイダー (例: Twitter) のリソース (ツイートなど) にアクセスできるようになります。

アクセストークンを発行するまでの基本的な流れは、次のようになっています。

OpenID Connect とは

OpenID Connect は異なるサービス間での認可を実現する仕組みの標準です。
OpenID Connect のフローを経ると、最終的には ID トークンが発行されます。

発行された ID トークンを見ることで、クライアントアプリ (例: Togetter) は認証したユーザーの個人情報 (email、アカウント名、プロフィール画像など) を知ることができます。

ID トークンを発行するまでの基本的な流れは、次のようになっています。

OAuth と OpenID Connect が似ている理由

両者のフローはとてもよく似ています。
それもそのはずで、というのも OpenID Connect は、認可の仕組みの標準である OAuth を認証にも用いられるように発展させたものなのです。

よく似たフローであるからこそ、Togetter のように認証・認可を同時に行うことが可能なのです (もちろん個別に利用することも可能です)。

やってはいけない OAuth 認証

ただし OAuth と OpenID Connect を混同して、OAuth のフローで発行されたアクセストークンを認証に利用してしまうのは大いに問題があります
これはいわゆる OAuth 認証の問題と呼ばれており、認可と認証を混同してしまっていることになります。

OAuth と OpenID Connect はそもそも目的が異なり、それゆえに用いられている暗号化・複合化の仕組みやトークンの寿命が異なります。
OAuth はあくまでも認可の仕組みの標準であり、それを認証にも利用できるようにしたのものが OpenID Connect であると考えてください。

※ ただし OpenID Connect が一般化する以前から OAuth をベースにした認証の仕組みを提供しているサービス (GitHub や Facebook など) もあり、それらは例外的に OAuth 認証を行っていると言えます。ただしそれらは、独自の仕組みによって安全に認証できるよう工夫されているものであり、基本的に OAuth 認証はやってはいけないという認識でよいと思います。

まとめ

今回は OAuth と OpenID Connect についてまとめてみました。
この記事が少しでも理解の助けになれば幸いです。


内容に間違いがあれば、コメントでご指摘いただけると嬉しいです。
いいね、フォローもぜひお願いします 🐳🐣🐙

https://twitter.com/t2ape

Discussion