- IAM 入門
- OpenID Connect(OIDC)とは?
OpenID Connect(OIDC)とは?
OpenID Connect または OIDC は、OAuth 2.0の認証・認可メカニズムを採用したアイデンティティプロトコルです。OIDC の最終仕様は、2014年2月26日に発表されましたが、現在では、インターネット上の多数のID プロバイダーによって広く採用されています。
OIDC は、Google や Microsoft などを含む OpenID Foundationにより開発されました。OAuth 2.0 は認可プロトコルである一方で、OIDC は、アイデンティティ認証プロトコルであり、顧客サービスに対するユーザーのアイデンティティを検証するために利用される場合があります。これは、リライングパーティ(認証依存側)とも呼ばれます。さらに、たとえば氏名やメールアドレスなどのユーザーの要求は、必要に応じて共有される場合があります。
多様なクライアントが、シングルページアプリケーション SPA)からネイティブなモバイルアプリまで OpenID Connect (OIDC)を使用することができます。アプリケーション全体にわたるシングルサインオン(SSO)に使うこともできます。OIDC は、JSON Web Tokens ジェイソンウェブトークン)(JWT)、HTTP フローを利用し、サービスとユーザーの認証情報を共有しないようにします。
OpenID Connect には、同意書が組み込まれています。このビルトインの同意書は重要です。OIDC は、消費者向けのサービス(リライングパーティーなど)に利用されることが多く、個人情報の共有にはユーザー側の明示的な同意が必要となるからです。
OpenID Connect は、実装しやすいだけでなく、こうした機能を備えていることから、ユーザー ID が求められる際の便利なプロトコルであり、より複雑な SAML 2.0に代わる強力な代替手段です。特にモバイルアプリにも適しています。
OpenID Connect は、OAuth2 とどのように適合するのか?
OIDC は、OAuth 2.0 を下位層のプロトコルとして採用しています。主な拡張子は、特別なスコープ値(「openid」)であり、余分なトークン(JSON 形式のID 要求をカプセル化するID トークン)を使用し、承認よりも認証を重視しています。また、OIDC における「フロー」という言葉は、OAuth2 の 「グラント」の代わりに使われています。
OpenID Connect の原理と定義
OIDC プロバイダー(通称、OpenID プロバイダーまたは ID プロバイダー、またはIdP)は、ユーザー認証、ユーザーの同意、トークン発行を実行します。 ユーザーIDを要求するクライアントやサービスは、通常、リライングパーティー(RP)と呼ばれています。たとえば、ウェブアプリケーションだけでなく JavaScript アプリケーションやモバイルアプリでも可能です。
OAuth 2.0 上に構築されているOpenID Connect は、トークンを使って、下位層のフレームワークに統合されたシンプルなアイデンティティ層を提供します。この統合は、次のタイプのトークンを使用していることを意味します:
ID トークン:特にOIDCにおいて、JWT 形式のトークンは主に、認証操作の結果に関する情報を提供するために使われています。要求に応じて、ユーザーのプロフィールを記述するアイデンティティデータを提供することができます。認証結果およびユーザーのプロフィールについてのデータは、クレームと呼ばれます。ユーザープロフィールのクレームは、関連 ID、メールアドレス、氏名など、識別を目的としたリライングパーティーに関するあらゆるデータです。
アクセストークン:OAuth2 で定義されているとおり、この オプションの)有効期間の短いトークンは、認証サーバーへのリクエスト時にスコープ値の定義に従い、特定のユーザーリソースへのアクセスを提供します。
リフレッシュトークン:OAuth2 仕様のこのトークンは、通常、有効期間が長く、新しいアクセストークンを入手するために使う場合もあります。
ID トークンは、改ざんを避けるためのデジタル署名が必要です。多くの場合、トランスポート・レイヤー・セキュリティ(HTTPS)が十分であっても、機密性を強化するため暗号化されることがあります。 SPAsおよびモバイルアプリでは、ID トークンの暗号化は、有用ではありません。暗号解読は、簡単にできるからです。
OIDC フロー
OpenID Connect フローの選択は、アプリケーションの種類やそのセキュリティ要件によります。一般的なフローには3つあります:
- 暗黙的なフロー:SPA によって一般的に使われているこのフローでは、トークンは、リダイレクト URI で RP に直接返されます。
- 認可コードフロー:トークンは直接返されることはないため、このフローは、暗黙的なものよりも安全性が高いと言えます。ネイティブ/モバイルアプリと SPA のセキュリティは、 コード交換のプルーフキーを使って強化することができます。ハイブリッドフロー:暗黙、かつ認証コードフローを組み合わせることで、ID トークンは、RP に直接返されますが、アクセストークンは返されません。その代わり、アクセストークンに交換される認証コードを返します。
ID プロバイダーは、OIDC を使ってユーザーを認証するために何を使うことができるのか?
ユーザーが IdP アカウントにサインインし、RP にアイデンティティデータを開示する同意をすれば、OpenID プロバイダーが、ユーザーの認証に使える認証方法を決定します。OIDC 仕様は、ユーザー認証自体の構造に関与することはありません。IdP は、シングルまたは複数の要素を提供します。例:
- ユーザー名/パスワード
- SMS または メールによって帯域外から提供されるシングルユーズコード、
- アプリ(OATH、TOTPまたはHOTP)が作成するコード
- アプリ経由の生体認証
- フェデレーション認証(Facebook、GoogleIDなど)
RP は、IdP 認証に関与することもできます。たとえば、多要素認証がリクエストされる可能性があります。ただし、IdP がユーザーを認証する方法は、OIDCの範疇ではありません。
より詳しく学ぶには?
[IAM 入門ページ](https://auth0.com/intro-to-iam/)で、さらに多くの、ID とアクセスの管理に関するトピックをご覧ください。
Table of contents
Quick assessment
OAuth 2 と OpenID Connect はどのような関係ですか?
Quick assessment
モバイルアプリに使う最適な OIDC フローとは何ですか?