何となくどんなものか知ってるけど、人には説明できないなって思ったので整理してもう少し詳しくなろうと思い学び直してみることにしました。
認証と認可
それぞれの違いを理解する前にまずは認証と認可について理解しようと思います。
認証とは誰であるのかを確認すること、本人確認になります。サービスを利用するのが正しい利用者なのかを確認するためにIDとパスワードを使ってその利用者が利用者本人なのか確認をとっています。
次に認可ですが、これは特定の条件下において対象(リソース)に権限を与えることです。
このように認証と認可を行うことで利用者本人と正しい権限を制御して安全にセキュリティを強化することになります。
OAuthとは
OAuthは認可を行うプロトコルのことです。アクセストークンを使用してユーザーがアプリケーションにアクセスできるように認可を行う考え方です。アクセストークンはどのような権限を持っているのかしますことができます。
例えばAPIを利用するときに何も保護されていないとデータが不正に抜き取られる危険性があります。こういったAPIを保護するための仕組みにOAuthがあります。
OAuthの仕組みを解説します。
- ユーザーがアカウント連携などの利用をサービスやアプリに対して要求します
- アプリやWebサービスなどのクライアントから認可サーバーに対してアクセストークンを要求します。
- 次に認可サーバーはアクセストークンを発行していいかユーザーに問います
- 許可が出たらアクセストークンを生成します
クライアントにアクセストークンを発行します。 - クライアントはAPIに対してアクセストークンを使ってデータを要求します
- サーバーはAPIを介してアクセストークンが正しいか検証します
- 正しい場合はAPIを介してデータを渡します。
OpenID Connectとは
認証を行うプロトコルです。IDトークンを使用して認証を行います。IDトークンを持っていることでユーザーがどこの誰であるかを示すことができます。
従来のopenIDとは違って導入しやすくGoogleなど様ざまなところで使用されています。
Open ConnectIDの仕組みを解説します。
- あるアプリにgoogleなどのアカウントでログインしようとします
- アプリなどのクライアントはIDトークンの発行をIDプロバイダーに要求します
- IDプロバイダーはユーザーに発行の許可を問いIDとパスワードを要求します
- ユーザーからIDとパスワードを渡されたらIDとパスワードの含まれたIDトークンを発行します
- リソースサーバではクライアントのIDトークンの認証を行います
SAMLとは
シングルサインオンやフェデレーションを実現する認証のためのプロトコルです。
IdPとSPが情報をやり取りする際に、情報形式の変換を省く方式で、ユーザーはサーバーに一度だけログインすれば、SAML認証方式に対応しているサービスを利用できます。
イントラネット(社内ネットワーク)やIdPにログインした後、Salesforce、Workdayなどの多数の追加サービスに、認証情報を再入力せずにアクセスできるようになります。
OAuthとOpenID ConnectとSAMLの違い
OAuthは認可するためのプロトコル、OpenID Connectは認証をするためのプロトコルになります。
OpenID ConnectとSAMLの違いになります。
OpenID Connectは、OAuth 2.0プロトコルをベースに構築されており、IDトークンと呼ばれる追加のJSON Web Token(JWT)を使用して、スコープやエンドポイントの発見など、OAuth 2.0が選択に委ねている部分を標準化しています。ユーザー認証に特化しており、消費者向けWebサイトやモバイルアプリでユーザーのログインを可能にするために広く利用されています。
SAMLは、OAuthとは独立しており、JWTとは対照的に、XML SAMLフォーマットで認証するためのメッセージの交換に依存しています。一般的には、企業ユーザーが1回のログインで複数のアプリケーションにサインインするために使用されます。
OpenID ConnectとSAMLは単独で使用してSSOを実現できますが、どちらもOAuthと連携して使用もできます。
似ていて紛らわしいですが、このくらいの理解で充分かと思っています。
参考文献
SAMLとは?SSO(シングルサインオン)認証の仕組み・メリット
OAuth、OpenID Connect、SAMLの違い
OAuthとOpenID Connectについて~仕組みや特徴など解説~