##OAuth2認証フローを理解するのは難しいですが、イラストと3つのポイントに絞って4つのタイプを分かりやすく説明します。
- Implementation Difficulty = 実装の難しさ
- Security = セキュリティーレベル
- Use Cases = 活用度
##OAuth2: 実装の難しさ
Authorization Code Grantタイプ(画像右上)は、4つのタイプの中で一番、実装するのが難しいです。他のタイプにはない、Guardが存在し実装が難しくなっています。
##OAuth2: セキュリティーレベル
Client CredentialとAuthorization Code grantタイプは、セキュリティーレベルの高いタイプになります。
Client Credential grantタイプ(画像左上)ユーザーとアプリケーションが同一になりますので、関連する要素やフロー(矢印の数)が最も少なく、データ流出を軽減します。
Authorization Code grantタイプ、ユーザーは認可キーをセキュリティーで守られたGuard(バックエンド)に渡します。より攻撃に晒されやすいアプリケーション(フロントエンド)はGuard(バックエンド)を通じてのみユーザーデータにアクセスできます。これによって直接的にシステムへの攻撃可能な部分を減らし、よりセキュリティーレベルが高くなっています。
Resource Owner Password Credential grant タイプ(画像左下)は、一番セキュリティーレベルの低いタイプになります。何故なら、ユーザーはユーザーのID、パスワードをアプリケーションへ教え、アプリケーションはそのキーを使用してユーザーの全情報にアクセス出来ます。これは不必要にアプリケーションにユーザーと同じ権限を付与しています。
##OAuth2: 活用度
Client Credential Grantタイプは、実装が簡単で、セキュリティーレベルの高い1番オススメのタイプに見えますが、活用度は1番低いです。このgrantタイプはユーザーとアプリケーションが同一である場合のみ利用可能であり、そのような場合、アプリケーションの利用方法は限定されます。つまり、アプリケーションはそのユーザー専用となります。
したがって、セキュリティが他のタイプでは重要とみなされるため、アプリケーションがバックエンドを持つ場合はAuthorization Code grantタイプを使用し、1ページアプリケーションまたはネイティブモバイルアプリケーションの場合はImplicit grantタイプ(画像右下)を使用する事が出来ます。
アプリケーションとOAuthサーバーが同じ所有者の場合で、ユーザーID/パスワードをアプリケーションと共有することがセキュリティ上のリスクとならない場合は、Resource Owner Password Credential grantタイプを使用する事が出来ます。
OAuth2について、詳しい説明は、こちらのブログから確認できます。