Help us understand the problem. What is going on with this article?

OAuth2.0の認可サーバーを理解する〜動作理解編〜

はじめに

これから何回かに分けてOAuth2.0の認可サーバに対する理解を深めるためのまとめを行います。
まとめの目的は、OAuth2.0の認可サーバー(authorization server)を作ることです。

OAuth2.0についてはこれまで何人もの先人達がまとめてるかと思いますが、RFCを参考にしながら自分流にまとめていきたいと思います。

動作理解編の目的

OAuth2.0の認可サーバーはどのような仕事をしているのか言葉ベースでまとめていきたいと思います。
OAuth2.0内で使用する実際のパラメータ名を使用した詳細な動作はフロー編で行なっていきたいと思います。

そもそもOAuth2.0とは?

OAuth2.0のプロバイダについてまとめる前に、まずはOAuth2.0について簡単にまとめます。
OAuth2.0とはRFC6749で定義されるHTTPプロトコル上で使用する認可フレームワークです。
以下、RFC6749のAbstractの引用

The OAuth 2.0 authorization framework enables a third-party
application to obtain limited access to an HTTP service, either on
behalf of a resource owner by orchestrating an approval interaction
between the resource owner and the HTTP service, or by allowing the
third-party application to obtain access on its own behalf. This
specification replaces and obsoletes the OAuth 1.0 protocol described
in RFC 5849.

つまりは、あるアプリケーション内で別サービス内の情報を利用する際に、公開するリソースとそれに対する操作(閲覧・作成・更新・削除など)を双方(あるアプリケーション別サービス)が共有するための仕組みです。
例:Githubアカウントリポジトリ閲覧権限を、あなたが作成するアプリケーション内で使用させてあげる。

OAuth2.0の登場人物

OAuth2.0に登場する要素は以下のとおりです。
わかりやすいように上の例と照らし合わせて書いていきます。

登場する要素 例との照らし合わせ
リソースオーナー
クライアント あなたが作成するアプリケーション
認可サーバー GitHubの認証・認可機能
リソースサーバー GitHubのAPIサーバー機能

わかり辛いのはクライアントには様々なパターンがあることです。

  • Webブラウザベースのアプリケーション
  • Webアプリケーションのアプリケーションサーバ
  • クライアントにインストールするアプリケーション(PC、スマートフォンアプリ)
  • etc...

と、ここまでOAuth2.0に登場する要素まで説明しましたが、
今回は作成したいOAuth2.0の認可サーバーに特化してまとめていきたいと思います。

OAuth2.0の認可サーバーとは?

OAuth2.0の認可サーバーとは、リソースオーナーの本人認証と、リソースに対するアクセス許可(認可)を行い、リソースオーナー許可したアクセス情報を一意に特定することができるアクセストークンをクライアントに発行するサーバです。
ここで発行されたアクセストークンをリソースサーバへのリクエスト時に合わせて送出することで、リソースサーバ側でアクセストークンの検証を行い、リクエストが正規のものかを判別することができます。

以下、RFC6749内のauthorization serverを引用

The server issuing access tokens to the client after successfully
authenticating the resource owner and obtaining authorization.

世の中の認可サーバー

大手のサービスではOAuth2.0の認可サーバーがたくさん稼働しています。
だいたいはOpenID ConnectというOAuth2.0上で実装されるユーザ認証の仕組みに使用されていることが多いですが、それについては後で別でまとめようと思います。

よく見るOAuth2.0認可サーバー

  • Google
  • Microsoft
  • GitHub
  • Twitter
  • etc...

認可サーバーの仕事

認可サーバーには以下の仕事があります。
プログラムとして実装する際は、以下の1レコードがそれぞれユースケースになるイメージです。

アクション アクセス者 詳細
ユーザー認証 リソースオーナー リソースオーナーに対して、認可サーバー上でのユーザー認証。基本的にはログイン画面を表示して認証させることが多い。RFCの中では認証方法については範囲外としている。
リソース認可 リソースオーナー リソースオーナーに対して、リソースサーバー上のリソースへの認可を行うためのインターフェースの提供。
アクセストークンの発行 クライアント クライアントアプリケーションに対してアクセストークンの発行を行う。
リフレッシュトークンの発行 クライアント クライアントアプリケーションに対してリフレッシュトークンの発行を行う。
アクセストークンの無効化 リソースオーナー 流出したアクセストークンを即座に無効化するためのユーザーインターフェースを提供する。
リフレッシュトークンの無効化 リソースオーナー 流出したリフレッシュトークンを即座に無効化するためのユーザーインターフェースを提供する。
アクセストークンの検証 リソースサーバー クライアントアプリケーションから送られたアクセストークンを検証する。

動作理解編のまとめ

今回はOAuth2.0の認可サーバーを作成するにあたって、どのような動作をしているのか理解するのに重きを置きました。

次回:フロー編

RFC6749にて定義されているフローについて、認可サーバーから見た時に具体的にどのようなパラメータに対してどのような処理をするのかを書こうと思います。

今後の予定

  • 動作理解編 <- 今回ここ
  • フロー編 <- 次ここ
  • セキュリティ編
  • 設計編
  • 実装編

おまけ:OAuth2.0の認可サーバー実装

自分だけのOAuth2.0認可サーバーを構築したい場合は以下のOSSを使うと楽ちんです。
自分で作るのは理解を深めるため(もとい自己満足)がとても強いです。

  • Keycloak
  • OpenAM
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away