.net column

.NET開発者のためのブログメディア

OAuthは認可情報の委譲が容易になる!4つのメリットを解説

2020年06月04日

SE
OAuthのメリットには、どのようなことがあるでしょうか?

PM
認可情報の委譲が容易やユーザー数の質が担保されるなどがあります。

OAuthとは?

OAuth(オーオース)とは、ネットワークでのアクセストークンの要求とその返答を標準化したものです。Instagramやツイッターなどでも使われていて、あるWebサービスを利用するときに、別のWebサービスを利用してアクセスの権限を認可する仕組みのことです。クライアントアプリがリソースサーバにデータを要求する際に必要となる検証材料のようなものがアクセストークンです。

OAuth活用の条件3つ

OAuthの活用には条件があります。サービス間での信頼関係やユーザーの同意がなくてはなりません。また、アクセストークンがあれば全てリソースサーバにアクセスできる訳ではありません。

活用の条件1:信頼関係の構築

OAuthは、信頼関係が構築されたサービス間でのみ受け渡しされます。クライアントアプリはアクセストークンを認可サーバーに要求します。OAuthは認可サーバからユーザーへ、クライアントアプリに権限を与えるかどうかの確認を取っています。ここでユーザーが権限を与えることを拒否すれば、別のサービスの管理する情報の取得や変更ができません。

活用の条件2:ユーザーの同意

OAuthはユーザーの同意のもとに受け渡しされます。クライアントアプリからアクセストークンのリクエストを受けた認可サーバは、ユーザーの同意を取った上で、そのクライアントアプリを認可するかを決めます。リソースサーバーとクライアントアプリのサービス間で認可情報を受け渡せると、ユーザーの認可のもとで別のサービスの管理する情報の取得や変更が行えるようになります。

活用の条件3:セキュアに受け渡しできること

OAuthは、柔軟でセキュアに情報を委譲できると言えるでしょう。アクセストークンを持つクライアントはリソースサーバーにアクセスできますが、認可されているデータにだけアクセスができます。ユーザーは認可する情報の適用範囲や、有効期限を設定することができるため、自分が利用したいサービスに最低限必要な権限だけを委譲することができます。

OAuthのメリット4つ

OAuthの活用条件がだいたいわかったところで、次はメリットを挙げてみましょう。OAuthを使うメリットは、ユーザー側にもクライアントアプリ側にもあります。ここでは大きく分けて4つのメリットを紹介します。

メリット1:認可情報の委譲が容易

OAuthのメリットとして、ユーザー側が認可情報の委譲を簡単にできることが挙げられます。ユーザーはIDとパスワードをクライアントアプリに預けなくても利用ができるので、ユーザー登録をする手間を省くことができます。例えば、Instagramにログインするだけで、Facebookに画像を投稿することもできてしまいます。

メリット2:有効期限を設定できる

OAuthではアクセストークンに有効期限を設定することができます。万が一、アクセストークンが悪意のある第三者に渡ってしまったとしたら、そのトークンに認可されている操作が悪用されてしまうという問題が生じます。この場合、アクセストークンに有効期限を設定していれば、悪用される危険性のある期間を短縮することができます。また、有効期限が切れてしまった場合も、リフレッシュトークンという仕組みが用意されています。

メリット3:柔軟な運営が可能

OAuthはユーザーが利用に最低限必要な権限のみを委譲できるので、柔軟な運用が可能です。OAuthでは、クライアントアプリに委譲する情報の範囲を、限定することができます。例えば、Gmailのアドレス帳へのアクセス権限を与えたい場合、読込だけのアクセスに限定することもできます。もちろん、Gmailのパスワードを渡すこと無く認可情報を委譲することができるので、外部サービスにパスワードを変更されアカウントを乗っ取られる心配もありません。

メリット4:ユーザー数の質が担保される

クライアントアプリとしてのメリットは、ユーザー数の質が担保されることです。OAuthを使ったクライアントアプリは、嘘のプロフィールを使ったサクラを減らすことができます。例えばFacebookのOAuthのみ対応の会員サイトであれば、かなり質の高いアカウントを確保することができ、なりすましのユーザー登録を避けることができるでしょう。

OAuthの概念3つ

OAuthの概念には3つの登場人物が必要です。User、Consumer、Service Providerの3つが関わりを持ち成り立っています。それぞれの立場から見た概念を見てみましょう。

OAuthの概念1:Userから見た場合

User(リソース所有者)は、Service Providerが、Consumer(他のサービス)に認可情報を渡すことを了承する立場です。許諾したり、拒否したり、すでに受け渡した認可情報を取り消したりします。

OAuthの概念2:Consumerから見た場合

Consumer(他のサービス)は、GoogleなどのService Providerから認可情報を受け取り、ユーザーに代わっていろいろな情報にアクセスしたり、変更したりする立場です。

OAuthの概念3:Service Providerから見た場合

Service Provider(Google、Facebookなど)は、ユーザーの認可情報を第三者に渡す立場です。Service Providerの主な役割は、Consumerの管理、アクセストークンの管理、OAuth経由のリソースへのアクセス管理です。

OAuth 2.0仕様の手順3つ

2020年現在で最新の標準である、OAuth 2.0の仕様を紹介します。OAuth 2.0では認可方式がいくつかあって、3つに分けることができます。アクセストークンを要求してきた相手が誰であるか、どこまで確認するかにより、アクセストークンが発行されるまでの流れが違ったり、発行される権限が違ったりします。OAuth 1.0もありますが、現在はOAuth 2.0を採用するのが良いとされています。

仕様の手順1:Implicit Grant

Implicit Grantはユーザーだけの認証で認可されます。App StoreやGoogle PlayでダウンロードできるようなネイティブアプリなどのPublic Client向けに用意されたフローで、client_secretなしで利用できるようになっています。クライアントの認証を行わないフローなのでセキュリティ面は弱くなります。Implicit Grantに関する脆弱性を突く攻撃もあります。

仕様の手順2:Client Credentials Grant

Client Credentials Grantは、アプリケーションだけの認証という意味合いです。独立アプリケーションのクレデンシャルのみを用い、認可サーバーの認証を受けるため、ユーザーのパスワードは必要ありません。独立アプリケーションが直接、認可サーバからアクセストークンを受け取るので、アプリケーション開発者から見た場合、このグラントが手続きとしては簡単といわれています。

仕様の手順3:Authorization Code Grant

Authorization Code Grantは、ユーザーとアプリケーション両方の認証で認可されます。ユーザーはクライアントが仕向けたブラウザで、直接認可サーバとやり取りし認証を受けます。続いてクライアントがアクセスすることを許諾する旨を、認可サーバに伝えます。その後、クライアントのWebコンテンツの新たなリクエストがブラウザから投入され、認可コードがクライアントへ伝達されます。クライアントは直接認可サーバと通信し、認可コードと自身のクレデンシャルを引き換えにアクセストークンを受け取ります。

SE
OAuthを利用することで、さまざまなメリットが得られるのですね。

PM
そうですね。しかし、発展途上の規格であるため脆弱性を理解して利用しましょう!

OAuthの仕様を理解しよう

ここまでOAuthの概念や使用、メリットなどを簡単に紹介してきました。OAuthは、Webサービスの共有が当たり前となった現在、APIアクセスの権限認可に必要不可欠なプロトコルとなっています。ただ、発展途上の規格であると言えるため、ユーザー情報が流出しアカウントの乗っ取りなどが起こってしまうことも否定できません。OAuthの仕様や認証の脆弱性を理解した上でWebサービスを利用しましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)