OAuth(オーオース)、OpenID Connect とは
昨今、TwitterやInstagramなどのSNSや、LINEなどのメッセージアプリが広く浸透しています。
それぞれのSNSやメッセージアプリを使用するにはログインが必要で、ログインするために必要なユーザー情報やパスワードなどを持った人だけが、SNSへの投稿やメッセージの送信や確認などを行うことができるようになっています。
そのような中、
● BOTと呼ばれるツールを使用した自動投稿
● ブログの投稿やゲームの進捗を共有するための自動投稿
など、人間の操作ではなくコンピューターの動作によって、自動的にメッセージがSNSに投稿されることも多くなってきました。
また、Webサイトにログインする際に「〇〇でログイン」といった、別サービスのアカウントを使用してログインできるようなサイトもたくさん存在するようになりました。
この「自動投稿」や「別サービスのアカウントでログイン」を実現するために、
● OAuth(オーオース)
● OpenID Connect(オープンアイディー コネクト)
といった手法が使用されています。
今回はこの手法について説明していきます。
OAuthの概要
OAuthとは、複数のアプリケーションを連携させることを目的として、あるアプリケーションからログインが必要な別のアプリケーションに対して、アクセスできるように「認可」を行う考え方です。
具体例として、ゲームの進捗をSNSに自動投稿するケースに沿って、どういう手法なのかを見ていきましょう。
1. まずはユーザーがゲームに対して、SNSの連携を要求します。
2. 次にゲームが対象となるSNSの連携システムに対して、SNS連携を要求します。
3. SNS連携システムがSNSアカウントを持つユーザーに対して、「連携してもいいか?」と確認を行います。
4. ユーザーが「連携してもOK」と判断し、応答します。
5. SNS連携システムがゲームに対して、SNSにアクセスするのに必要な情報となる「アクセストークン」を提供します。これによって、SNSとの連携設定が完了となります。
6. ゲーム内において進捗が達成された際に、提供された「アクセストークン」を使用して、SNSにアクセスしてゲームの進捗情報が投稿されます。
この一連の流れがOAuthの考え方となります。
この、2から5の手順によって「認可」が行われることになります。
この考え方については、「OAuth 2.0」としてRFC(RFC6749、RFC6750)によって標準化されています。
OAuthの危険性
OAuthを利用するとさまざまな脅威に晒される危険性があります。
どんな脅威があるのか見ていきましょう。
● アクセストークン流出
2022年4月にOAuthのアクセストークンが流出して、不正アクセスされてしまった結果、非公開の情報が盗まれるという事件が発生しました。
アクセストークンが入手できてしまえば、SNSなどへのアクセスができるようになってしまいます。
その結果、アカウントの乗っ取りや個人情報や大事なデータが盗まれてしまうことになったり、非公開設定になっている情報を公開設定に変更されてしまう危険もあります。
● なりすましなど悪意があるWebサイトを認可してしまう
他のWebサイトになりすまして、アクセスしてきたコンピューターに対してコンピューターウイルスに感染させてしまう手口は有名ですね。
OAuthに関しても、同様に他にWebサイトになりすまして、OAuthの認可を促すサイトが存在しています。もし、気づかずに認可してしまった場合、アカウントが乗っ取られてしまうことになります
OAuthを使用する上での対策
● アクセストークンの発行元を確認する
アクセストークンを発行したところが本当に信頼できるところなのか?を確認します。
● 不用意に連携するアプリケーションを増やさない(むやみにアクセストークンを発行しない)
アプリケーションを連携する際に、深く考えずに次々と連携させてしまうと、その分セキュリティリスクが大きくなります。連携するアプリケーションは信頼できる必要最低限に絞りましょう。
● 使用しないアプリケーションの連携は削除する(使用しないアクセストークンは削除する)
もし、使用していないアプリケーションの連携が残っていたら削除しましょう。万が一、そのアプリケーションでアクセストークンの流出が発生しても、不正アクセスを未然に防止することができます。
● OpenID Connectを使用する
後述する「OpenID Connect」を使用することによって、危険性が回避できるケースがあります。
OpenID Connectの概要
OpenID Connectとは、前述のOAuth 2.0の考え方をベースに、ログインするために必要な情報(OpenID)をトークンに含んだものです。一般的に「ソーシャルログイン」と呼ばれる物の中には、この方法を利用して実現されているものもあります。主に、他のアプリケーションで使用するログイン情報を使用して、目的のアプリケーションにログインする場合に使われます。
例として、「WebサイトA」にログインするために「WebサイトB」のログイン情報を使用する場合は、次のような手続きがふまれて、ログインされます。
1. ユーザーがWebサイトAに対して、「WebサイトBでログインする」と要求します。
2. WebサイトAがWebサイトBのID発行システムに対して、「IDトークン」の発行を依頼します。
3. WebサイトBのID発行システムからユーザーに対して、認証を要求します。
4. ユーザーはWebサイトBに登録している認証情報を入力して認証します。
5. WebサイトBのID発行システムが「IDトークン」を作成してWebサイトAに提供します。
6. WebサイトAにてIDトークンを使って認証され、ログインされます。
「ログインするために必要な情報(OpenID)」ですが、Webサイト間で認証情報を共有する認証プロトコルの標準として策定されています。
OpenID ConnectはこのOpenIDをIDトークンとして利用し、認証情報を共有しています。
OAuthではなくOpenID Connectを使用することで対策できる理由
発行されたIDトークンの中には、次のような情報が含まれています。
iss | IDトークンの発行者 |
sub | 対象者の情報 |
aud | 利用者の情報 |
これを上記の例に置き換えると、
iss | WebサイトB |
sub | ユーザー |
aud | WebサイトA |
という情報を持つことになります。
このため、もし「WebサイトAに似せた詐欺サイト」からIDトークンを取得した場合、
iss | WebサイトB |
sub | ユーザー |
aud | WebサイトAに似せた詐欺サイト |
と、audが違った情報になります。
このIDトークンを、WebサイトAで使用しても、audの情報が違うため使えない。ということになり、OAuthのリスクを回避できる可能性が出てきます。
OAuth認証とOpenID Connect
OAuthは「認証」を目的としたものではありません。データにアクセスする権限を「認可」するためのものになります。ですが、「OAuth認証」と呼ばれる手法が存在しています。この手法で実現されているものも「ソーシャルログイン」と呼ばれています。
一部のWebサイトでは次の手順でOAuthを利用して認証しているところがあるようです。
● OAuthでデータにアクセスするためのアクセストークンをもらう
● アクセストークンを使用して、「認証に必要な情報」を取得する
● 取得した「認証に必要な情報」を使用してログインする
この認証方法は「OAuth認証」と呼ばれ、OpenID Connectができる前から利用されてきました。
現在、この手法を使っているWebサイトは独自の方法によって安全性が確立されているようですが、安易にこの方法で認証を作成してしまった場合、アクセストークンが流出するとユーザーの認証情報が取得されるリスクが発生します。そのため、この認証方法は推奨されていません。その代わりとなるのが、OpenID Connectとなります。
OpenID Connectには前述のような「IDトークンの発行先」が含まれており、想定していないアプリケーションからログインされようとした際には検出することが可能となります。
まとめ
今回は OAuth と OpenID Connect について解説しました。メリット・デメリットを含め仕組みについてご理解いただき、実装時の参考となれば幸いです。
※記載されている会社名、製品・サービス名は、各社の登録商標または商標です。