OAuthとは?
現在のWeb APIにおいて非常に広く一般的に利用されている標準仕様です。基本的に広く第三者に公開されるAPIにおいて認可を行うために用いられます。
APIへのアクセスを認可(制御)して重要なデータへのアクセスを制御するHTTPベースのプロトコル。アプリ開発において、アプリを安全に扱うための標準化された仕組み。具体的には、アプリの所有者が誰かを明示化してなりすましを防止させるための仕組み。
認可と聞くとアプリケーションがユーザーに許可するようなイメージをするかもしれませんが、OAuthの場合は、ユーザーがアプリケーションに対して認可をする仕組みです。
例えば、情報を持っているサービスAが、サービスBに対してAPIを公開する場合に、サービスAの情報をサービスBに対して利用して用意か許可を与えることができる機能のことです。
用途
- 一般的なWebサービスの連携
- 企業内システムをクラウド連携させる目的
利用サービス例
バージョン
1.0
瞬く間に世に広がっていった。モノシリックなプロトコルだった。
弱点
- セッションID固定化攻撃に弱かった。
2.0
2012年ごろに公開された。
モノシリックではなくモジュールとなった。
利点
広く認知されて入れサーバ、クライアントともに様々な言語のライブラリがあり実装コストが低い。
悪意あるアプリ開発者の抑制(外部アプリへの操作権限を限定的にできる。)
もし、これがなかったら「ユーザー名」と「パスワード」を外部アプリに教えるしかなくなる。何度も入力するのは煩わしいので、パスワードをアプリ側に保存することになってしまう。そうすると仮に外部アプリの開発者が悪意あるユーザーだった場合は、利用者のアカウントでログインすることが可能になってしまう。
アクセストークンがあれば、仮にトークン情報が漏れたとしても操作を限定的にできる。(ダウンロード操作など)
悪意あるアプリ開発者の抑制(特定のアプリだけアクセスを遮断できる。)
OAuthを使えば、該当の悪意あるアプリへのアクセスを遮断できる。
攻撃に強い。
ユーザー名や、パスワードを保持しているアプリに比べて情報漏洩に強い。
アクセストークン自体が漏洩する可能性はありますが、有効期限があり、かつ限定的な権限しかないので影響は限定的。
仕組み、流れ
一度サービスA(Twitterなど)にログインすると、アクセストークンが発行されてそのトークンを用いればサービスBはアクセスが許可された物だと認識しパスワード入力なしでサービスAにアクセスすることが可能になります。
グランドタイプ
「グランド」は「付与」という意味。権限委譲のことを指している。標準仕様では以下の4つがある。
認可コードグランド
最も重要なグランド。コンフィデンシャルクライアント(サーバーサイドアプリなど)はこれを使う。
特徴
セキュアであること。(ブラウザを介さずに直接クライアントと認可サーバー間で受け渡されるため流出するリスクが低い。)
PKCEを用いた認可コードグランド
パブリッククライアントの場合のグランドタイプとして推奨されている。
インプリシットグランド
クライアントクレデンシャルグランド
リソースオーナーパスワードクレデンシャル
Open ID Connectとは?
OAuth2.0をユーザー認証として活用するために拡張したものです。OpenID Foundationという組織が2014年に仕様を公開した。
ほとんどOAuthと変わらないですが、OAuthに対して本人情報取得を加えた仕組みになります。
OAuth2.0からの拡張内容
以下を定めたこと。
- IDトークン(JWT)
- ユーザー情報を取得するためのエンドポイント(データ送受信するためのURL)
IDトークン(JWT)の利点
「ユーザーを特定するID」や「認証した日時」などを知ることができる。
また、「ユーザー情報を取得するためのエンドポイント」から様々なユーザー情報(ユーザープロフィールなど)を取得できます。
OIDCユースケース
SNSなどのサイトデータを使用したい。
SNSなどの認証を任せたい。
社内シングルサイオンのプラットフォームにしたい。
クラウドなら
- Auth0、Okta
この記事へのコメントはありません。