認証と認可はセキュリティを強化する上で欠かせない技術です。認証と認可を実現する技術として、OAuthやOpenID Connectがあります。OAuthは2012年に制定された認可のためのプロトコルです。このOAuthの拡張仕様として開発されたのが、認証のためのプロトコルであるOpenID Connectです。本記事では、OAuthとOpenID Connectの仕組みや特徴、違いについて解説します。
認証と認可とは
OAuthやOpenID Connectを理解するためには、まず認証と認可について理解する必要があります。認証とは、通信の相手が「誰(何)であるのか」を確認・特定することです。認証には、ID・パスワードを使用する知識情報による認証、顔や指紋などを使用する生体情報による認証、SMSを使う所持情報をによる認証などがあります。それに対し、認可は、特定の条件下において、対象物(リソース)を利用可能にする(アクセス)権限を与えることです。認証と認可を別で行うことで、全てのユーザーではなく限られたユーザーにのみアクセス権限を付与することができます。認証と認可を使い分けることで柔軟な対応が可能となり、セキュリティを強化することに繋がります。
※認証と認可について詳しくはこちら「認証と認可の違いとは|セキュリティの強化について説明」
OAuthとは?
OAuthは認可を行うプロトコルです。OAuthではアクセストークンを使用してユーザーがリソースサーバーの資源を使用していいかを検証します。アクセストークンは認可に使われるもので、どのようなアクセス権限を持っているのかを示すことができます。OAuthではアクセストークンを使用することで信頼関係のあるサービス同士でのセキュアなアクセス権限の移譲が可能となります。
仕組み
OAuthの仕組みについて解説します。 Webやアプリケーションとリソースサーバーとの間でデータをやり取りするとき、APIをいうところを通してデータの受け渡しが行われます。APIとはプログラムを介してアプリケーションやソフトウェアの資源を使用するための接続口のことで、これによりソフトウェア機能を共有することができます。このAPIですが、何も保護していないとAPIを介してデータを不正に抜き取ることが可能です。なにも保護していない状態では、情報漏洩や悪用などのセキュリティ上の問題が発生することも想定されます。このAPIを保護するために誕生した仕組みがOAuthです。OAuthはリソースサーバーの資源を使用していいかどうかを認可することで、APIを守ります。
OAuthの流れとしては、以下の図解の通りです。 まず、webサービスやアプリなどのクライアントから認可サーバーに対してアクセストークンの発行の要求を行います。認可サーバーとは、アクセストークンを生成するサーバーです。認可サーバーはアクセストークンの発行の要求をされたら、ユーザーに対してアクセストークンを発行していいかどうか問います。ユーザーからの許可が出たら、認可サーバーはアクセストークンを生成します。そして、アクセストークンをクライアントに対して発行します。クライアントは発行されたアクセストークンを持ってデータの委譲を要求します。リソースサーバーは、APIを介してアクセストークンが正しいものか検証します。認可されれば、APIを介してデータが渡されます。このアクセストークンの要求とその返答を標準化した技術がOAuthです。
特徴
OAuthの特徴として、アクセストークンを使用することが挙げられます。 アクセストークンを使用することで、IDとパスワードを使用せずに済みます。そのため、アクセス権限の委譲が容易になります。アクセストークンには、有効期限を付けることも可能です。もし、アクセストークンを不審者が手にしても有効期限が過ぎてしまえば、不正アクセスができないようになっています。また、ユーザーが必要な分のみ権限を与えることができ、柔軟な対応が可能となります。
しかし、OAuthではアクセストークンを不正に取得されてしまうと、リソースサーバーを守ることができないといったことも特徴として挙げられます。不正な取得を避けるためには、ユーザーが安易にアクセストークンの発行を許可しないことも大切です。
OpenID Connectとは?
OpenID Connectは認証を行うプロトコルです。OpenID ConnectではIDトークンを使用し、認証を行います。IDトークンとは、認証のために使われるもので、これを持っていることでユーザーがどこの誰であるのかを示すことができます。OpenID ConnectではIDトークンを使用することでサービスが異なる場合でも、共通のIDとパスワードを取り扱うことができます。
仕組み
OpenID Connectの仕組みを解説します。
まず、webサービスやアプリなどのクライアントからIDトークンの発行を要求します。この要求に対して、IDプロバイダーはユーザーへIDトークンを発行の許可を問います。ユーザーから許可がでたら、ユーザーのIDとパスワードが含まれているIDトークンをクライアントに発行します。リソースサーバーではクライアントが持っているIDトークンを使用し、認証を行います。
OpenID ConnectはIDプロバイダーとクライアント間でのIDトークンの要求と発行を標準化したものです。先ほど説明したOAuthのアクセストークンの要求とその発行を認証用に開発されたのが、OpenID Connectです。さらに、OpenID ConnectではIDプロバイダーが認可サーバーの役割を兼ね備えています。そのため、IDトークンとアクセストークンを同時に発行することも可能です。
特徴
OpenID Connectには、従来のOpenIDを使用した認証システムに比べて、導入しやすいという特徴があります。従来の認証システムでは導入の際に高度な技術が求められていました。しかし、OpenID Conectは簡単なコードをサービスに書き入れるだけで導入が可能です。OpenID Connectは、導入が容易であるためGoogleやMicrosoft、SalesForceなどでも使用されています。
また、OpenID ConnectはID・パスワードの管理が容易になるという特徴もあります。これは、IDトークンを使用した認証の利点と言えます。IDトークンの使用は、迅速な認証の実現も可能にします。その他にも、IDトークンを使用することで、セキュリティを強化できます。
しかし、IDトークンを不正に発行、取得されてしまうと不正にログインされてしまいます。IDトークンは共通のID・パスワードを複数のサービスで使用できるようにするものなので、IDトークンがあれば複数のサービスで同時に不正アクセスが可能となってしまいます。そのため、IDトークン発行許可は適切に行う必要があるという特徴もあります。
OAuthとOpenID Connectの違い
OAuthとOpenID Connectの大きな違いとして、認証を実現するプロトコルか認可を実現するプロトコルかという点があります。OAuthは認可のためのプロトコルです。そのため、認可のために使用するアクセストークンを発行します。これにより、アクセス権限を委譲し、APIを保護することができます。それに対して、OpenID Connectは認証のためのプロトコルです。そのため、認証のために使用するIDトークンを発行します。IDトークンには、ID・パスワードの情報が含まれており、異なるサービスでも共通のID・パスワードを使用することが可能です。
まとめ
本記事では、OAuthとOpenID Connectについて解説しました。どちらも認証と認可というセキュアなセキュリティを実現するためには欠かせない技術であると言えます。特にOpenID Connectは、OAuthの技術を応用し、OpenIDを簡単に使用できるようにした技術です。使用上の注意はあるものOpenIDを使用した認証を容易に実現できるので、これからも継続した使用が期待できるでしょう。
かもめエンジニアリングでは、OpenID Connectに連携可能な「Keygateway」を提供しています。「Keygateway」はVPNに代わるセキュリティとして、ゼロトラストを採用したセキュリティモデルを基に構成されています。これにより、セキュアなリモートアクセスが可能です。簡単なご相談も歓迎しておりますので、ぜひ下記フォームよりお問い合わせください。
事業・商品・サービスに関するお問い合わせ
製品に関するお問い合わせはこちら
※フリーメールでのお問い合わせは受け付けておりません。