認証スタンダードOAuth 2.0とは?その仕組みとフローを徹底解説!
この記事では、Webを中心に広く普及しているスタンダードであるOAuth 2.0について初心者向けに説明する。
アプリを制作しているとよく見かけるキーワードの一つに「OAuth 2.0」がある。
OAuth 2.0は非常によく普及しており、OAuthを使ったアプリは誰もが使用した経験があるはず。しかしその一方で、その仕組みについてしっかりと調べたことがある人は少ないのでは無いだろうか?
この記事では、アプリの開発者向けにOAuth 2.0とトークンを始めとするよく使われる用語を説明したい!
OAuth 2.0とは?
OAuth 2.0(オー・オースと読む)はユーザー権限の認可をおこなうためのスタンダードで異なる2つのサービス間でユーザー情報などのリソースを共有することを可能にする。
シンプルな例としては、「Googleアカウントを使用してTwitterにサインインする」で、読者の多くはユーザーとしてOAuth 2.0を使った権限の認可をすでに使用したことがあるだろう。
OAuth 2.0はアプリのユーザー認証システムとして単独のシステムにおいてもよく使用される。
なお、OAuth 2.0はOAuth 1.0とは後方互換性が無い。
OAuthの歴史
OAuthは2006年にTwitterのブレイン・クック氏により提案され、インターネットコミュニティの協力を得て2007年に最初の仕様となるOAuth Core 1.0が決定された。
OAuth 1.0はRFC 5849として2010年4月に発行され2010年8月にTwitterに導入された。
新たなユースケースが追加されたOAuth 2.0はRFC 6749・RFC 6750として2012年10月に発行された。
*RFC とはRequest for commentsの略で技術仕様の公開形式のこと。
- RFC 5849(日本語) https://tex2e.github.io/rfc-translater/html/rfc5849.html
- RFC 6749(日本語) https://tex2e.github.io/rfc-translater/html/rfc6749.html
- RFC 6750(日本語) https://tex2e.github.io/rfc-translater/html/rfc6750.html
OAuth 2.0の仕組み
以下の図はOAuth 2.0でリソースの使用権限を得るまでのフローを表している。
① クライアント(ウェブサイトやモバイルアプリなど)がユーザーに認可要求(Authorization Request)をおこなう。
② ユーザーが認可要求を承認すると認可グラント(Authorization Grant)がクライアントに返される。
③ クライアントが認可サーバーにアクセストークンを要求する。
④ 認可サーバーはクライアントの認証と認可グランドを確認したうえでアクセストークンを発行する。
⑤ クライアントはアクセストークンを使用してリソースへとアクセスする。
⑥ リソースサーバーはクライアントにリソースを提供する。
OAuth2.0の用語集
OAuth 2.0に関連してよく使われる用語を挙げてみた。
OpenID Connect
OpenID ConnectはOAuth 2.0に認証結果や属性情報を付加するための規格。
OpenID Connectにより、開発者は簡単に安全性の高いの認証システムを実装することができる。
クレデンシャル
クレデンシャルとは認証に用いられるユーザー情報のことで、おもにユーザー名(もしくはEメール)とパスワードのことを指す。
アクセストークン
アクセストークンはHTTPリクエストをおこなうための許可証のようなもので、セッションごとに発行される。
アクセストークンにはユーザーのクレデンシャルとユーザの権限などが含まれている。
リフレッシュトークン
リフレッシュトークンはアクセストークンが有効期限が過ぎた際に新規のアクセストークンを所得するために使用されるトークン。
リフレッシュトークンは新規のリクエストトークンを取得する際に同時に送られてくる。
クライアントID & クライアントシークレット
クライアントIDはHTTPリクエストの送信元を識別するためのIDで、クライアントシークレットはそれとともに使用されるパスワードのようなもの。
クライアントIDとクライアントシークレットはともにHTTPヘッダーにて、Authorizationプロパティの値として使用される。
OAuth 2.0を実装するためのAPI
TwitterやGoogleなどではOAuth 2.0を使用するためのAPIを提供しており、開発者は最小限の実装でOAuth 2.0を使ったログインや権限の付与を自分のアプリに実装できる。
以下はOAuth 2.0を使用したAPIの例である。
- Twitter Deveoper Platform:: https://developer.twitter.com/en/docs/authentication/oauth-2-0
- Google Identity:: https://developers.google.com/identity/protocols/oauth2
- yahoo! developer:: https://developer.yahoo.com/oauth2/guide