お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の
英語版を参照してください。
  
 OpenID 接続 (OIDC) は、OAuth 2.0 認可プロトコルの上に構築されたアイデンティティレイヤーです。これにより、サードパーティアプリ(クライアント)がユーザーの本人確認や基本的な権限情報へのアクセスを行うことができます。 
 
 
 それでは、OIDC の仕組みを理解する前に、いくつかの用語について確認しましょう。 
 
 
  
  
   
    
     OpenID Provider (OP)
    
     
      OAuth 2.0+10、-10 の認可コンポーネントであり、ユーザーの認証や、クライアントが要求するユーザー情報の提供を行います。
     
    
   
    
     Claims
    
     
      OIDCフローでユーザーに関する情報が送信されたものを claims(クレーム)と呼びます。
     
    
   
    
     ID token
    
     
      ユーザー情報や認証内容を含むJSON Web Tokenです。
     
    
   
    
     Access token
    
     
      OPのリソースサーバーからユーザー情報へアクセスする際に使用されるトークンです。
     
    
   
    
     更新する token
    
     
      以前に発行されたアクセストークンの有効期限が切れた際、新しいアクセストークンを取得するために使用されるトークンです。
     
    
   
    
     Authorization Endpoint
    
     
      ユーザーが自身を認証し、特定情報へのアクセス許可を与える場所です。
     
    
   
    
     Token Endpoint
    
     
      RPが、AuthorizationコードをOPから受け取り、IDトークン、アクセストークン、または更新するトークンへ交換する場所です。
     
    
   
    
     ユーザー Info Endpoint
    
     
      RPがアクセストークンを提示して、ユーザーに関する情報(claims)を取得する場所です。
     
    
   
    
     Discovery Endpoint
    
     
      OPに関連するすべての構成詳細が表示される場所です。
     
    
   
    
     JSON Web キー (JWK) Endpoint
    
     
      RPがトークンの正当性を認証するための鍵を受け取る場所です。
     
    
   
  
 
  
   
   
    
     
      Relying Party (RP)/ クライアント
     
      
       OpenIDプロバイダーからユーザー認証およびユーザー情報を要求するクライアントアプリケーションです。
      
     
    
     
      スコープ
     
      
       認証および認可リクエストで使用されるパラメーターで、どの種類のユーザー情報が必須かを定義します。
      
     
    
     
      Authorization コード
     
      
       認証レスポンスで認可エンドポイントからクライアントに送信されるコードであり、その後、トークンエンドポイントでIDトークンおよびアクセストークンと交換できます。
      
     
    
     
      リダイレクトURI
     
      
       認証および認可レスポンスを認可エンドポイントが送信するURLです。
      
     
    
     
      サインアウトエンドポイント
     
      
       現在認証されているセッションからユーザーをログアウトするために使用されるエンドポイントです。
      
      
       
      
     
    
   
   クライアントの前提条件:
  
 
  クライアント(Relying Party)は、リソースプロバイダー(OpenIDプロバイダー)に登録し、OpenIDプロバイダーからクライアントIDおよびクライアントシークレットを取得している必要があります。 
  
 
 
基本 OIDC フロー: 
 Relying Partyは、OpenIDプロバイダーの認可エンドポイントに対して、ユーザーの認証および特定のユーザー情報へのアクセス許可の取得を要求します。ユーザーの認証および認可が完了すると、認可エンドポイントはIDトークンとアクセストークンをRelying Partyに送信します。
 
  
   
   
    このトークン交換における使用中のメソッドは、Relying Party(RP)の種類や選択された認証フローによって異なります。各RPタイプと推奨される認証フローについては、この記事の後半で解説します。 
    
   
  
   RPは、アクセストークンを用いてOPのUserInfoエンドポイントからユーザー情報(クレーム)をリクエストします。OPは、同意されたクレームをRPに送信します。 
   
  
  
   
  
  
   
  
  
 
Relying Partyの種類と推奨認証フロー: 
通常Webアプリケーション(MPA)およびAuthorizationコードフロー:
 これらのアプリケーションはサーバー上で動作し、各操作ごとに新しいページリクエストをサーバーへ送信します。クライアントシークレットを安全に保存できるため、「Confidential Client」とも呼ばれます。MPAに最適な認証フローはAuthorizationコードフローです。 
 
 
  このフローでは、RP(クライアント)がOPのAuthorizationエンドポイントに対し、ユーザー認証と特定ユーザー情報へのアクセス権限取得をリクエストします。ユーザーの認証と認可が完了すると、AuthorizationエンドポイントからクライアントにAuthorizationコードが送信されます。クライアントはこのAuthorizationコードを使用して、OPのトークンエンドポイントでIDトークンおよびアクセストークン(必要に応じて更新トークン)を取得します。クライアントはIDトークンから必要なユーザー情報(クレーム)を取得します。 
  
 
 
 
  Single-Page Application(SPA)およびImplicitフロー
 
 
 SPAは、操作に応じて必要なセクションのみを読み込むモダンなWebアプリケーションです。これらは主にクライアントサイドで動作し、最初にすべての必要なリソースをサーバーから取得します。公開クライアントとも呼ばれ、全データがブラウザ上にあるためクライアントシークレットの安全な保存はできません。SPAに推奨される認証フローはImplicitコードフローです。 
 
 このフローでは、クライアント(RP)がOPのAuthorizationエンドポイントに対し、ユーザー認証と特定ユーザー情報へのアクセス権限取得をリクエストします。ユーザーの認証と認可が完了すると、AuthorizationエンドポイントからIDトークンが直接クライアントへ送信されます。要求があれば、アクセストークンや更新トークンも送信されます。クライアントはIDトークンから必要なユーザー情報を取得します。このフローではトークンエンドポイントは使用しません。 
 
 
 ネイティブアプリケーションは、特定のデバイスに直接インストールされるアプリケーションです。これらも公開クライアントとして扱われます。デバイスに直接インストールされるため、クライアントシークレットを安全に保存できず、アプリケーションがデコンパイルされることで誰でもシークレットにアクセスできる可能性があります。ネイティブアプリに推奨されるフローは、Proofキーによるコード交換(PKCE)付きのAuthorizationコードフローです。 
 
 このフローでは、クライアント(RP)がコードベリファイア(ランダムな文字列)とコードチャレンジ(任意のハッシュアルゴリズムでコードベリファイアをハッシュ化したもの)を生成します。認可リクエストをOPの認可エンドポイントに送信する際、クライアントはコードベリファイアも送ります。ユーザーが認証・認可された後、認可エンドポイントはクライアントに認可コードを送信します。OPのトークンエンドポイントでは、クライアントがこの認可コードとともにコードチャレンジおよび使用中のハッシュ方式を指定してコードベリファイアをハッシュ化します。トークンエンドポイントは、指定されたハッシュ方式でコードチャレンジを復元し、その結果とコードベリファイアを照合して、認可コードを受け取ったクライアントが認可リクエストを送信したクライアントと同一であることを認証します。その後、トークンエンドポイントはIDトークンとアクセストークン(リクエストがあれば、更新用トークンも)を発行します。クライアントはIDトークンから必要なユーザー情報を取得します。