Zoho Directory における OIDC 認証フロー

Zoho Directory における OIDC 認証フロー

お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

概要

OpenID Connect(OIDC)は、OAuth 2.0認可フレームワーク上に構築されたアイデンティティレイヤーです。これにより、アプリケーションは外部のアイデンティティプロバイダー(IdP)を通じてユーザーの本人確認を行うことができます。
OIDCベースの認証フローでは、アイデンティティプロバイダーがユーザーの認証とトークンの発行を担います。Zoho Directoryは、設定されたOIDCエンドポイントと認証情報を使用して外部IdPと通信し、ユーザーの認証、返されたトークンの検証、必要に応じたユーザー情報の取得を行います。

設定

Zoho Directoryはサービスプロバイダー(SP)として機能し、外部のアイデンティティプロバイダー(IdP)は、ユーザーの認証を担うOpenID Connectプロバイダーとして機能します。
  1. Zoho DirectoryでOIDC認証を設定するには、管理者がZoho DirectoryをクライアントアプリケーションとしてIdPに登録し、IdPの詳細をZoho Directoryに入力する必要があります。
  2. Zoho DirectoryでOIDCを設定するには、IdPから次の情報を取得する必要があります。
    1. クライアントID:IdPが各要求でZoho Directoryを識別するために使用します。
    2. クライアントシークレット:認可コードをトークンと交換する際のZoho Directoryの認証に使用します。
    3. 発行者URL:IdPから取得する発行者URLです。認可URLとアクセストークンURLを自動的に取得するために使用します。
    4. 認可URL:ユーザーは、認証とアクセスの許可を行うために、このURLにリダイレクトされます。
    5. アクセストークンURL:認可コードをトークンと交換するために使用するURLです。
    6. スコープ:認証時に要求するZoho Directoryの情報を指定します。初期設定のスコープは、openid、email、profileです。
    7. (任意)ユーザー情報URL:IdPから追加のユーザー情報を取得するために使用します。
  3. Zoho DirectoryからはリダイレクトURIが提供されます。このURIをIdPに設定する必要があります。ユーザーはサインイン後、このURIにリダイレクトされます。

フロー

OIDCフローは、ブラウザー、Zoho Directory、アイデンティティプロバイダーの間で実行されます。サインイン時には、Zoho Directoryが作成するstateと、IdPが作成するcodeの2つの値がブラウザーを経由します。
  1. state:IdPに送信される要求に追加される、暗号化されたランダムな値です。Zohoは、安全なCookieを使用してユーザーのブラウザーに関連付けたコピーを保持します。IdPはこの値を変更せずに返します。Zohoは、返されたstateがそのブラウザー用に保持しているコピーと一致するかを確認し、偽造または再送された応答をブロックします。
  2. code:IdPが発行し、リダイレクトURIで返す、有効期間が短い一度限りの値です。
ブラウザーを経由するのはリダイレクトと一度限りのコードのみです。トークンの要求と応答は、Zoho DirectoryとIdPの間で直接送受信されます。

1. ユーザーによるサインインの試行

ユーザーがZoho Directoryと連携しているアプリケーションにサインインしようとすると、Zoho Directoryは、そのユーザーにOIDC認証が設定されていることを識別します。

2. アイデンティティプロバイダーへのリダイレクト

Zoho Directoryは、認証のためにブラウザーをIdPへリダイレクトします。認可要求には、クライアントID、リダイレクトURI、要求されたスコープ、response_type=code、state値が含まれます。

3. ユーザーの認証

IdPは、ユーザー名とパスワード、MFA、パスワードレス認証など、設定されている認証方法でユーザーを認証します。ユーザーの認証情報はIdPによって検証されます。Zoho Directoryは認証プロセスには関与しません。

4. 認可コードの返却

認証に成功すると、IdPは一度限りのcodeと同じstateを付加して、ブラウザーをZoho DirectoryのリダイレクトURIにリダイレクトします。Zoho Directoryは、stateがそのブラウザー用に保存されている値と一致するかを確認します。一致しない場合やIdPからエラーが返された場合、サインインは中止されます。

5. Zoho Directoryによるアイデンティティプロバイダーへのトークンの要求

codeを受信すると、Zoho Directoryのサーバーは、grant_type=authorization_codeを指定したHTTPS POST要求を使用して、コードをIdPのトークンエンドポイントに安全に送信します。Zoho Directoryは、クライアントIDとクライアントシークレットを使用して要求を認証します。その後、IdPはIDトークンとアクセストークンをZoho Directoryに返します。
  1. IDトークン:認証されたユーザーに関する情報が含まれます。
  2. アクセストークン:保護されたリソースやAPIへのアクセスに使用します。必要に応じて追加のユーザー情報を取得する場合も含まれます。

6. トークンの検証

ユーザーをサインインさせる前に、Zoho DirectoryはIdPから受信したIDトークンを検証します。Zoho Directoryは、IDトークンに対して次の確認を行います。
  1. 署名アルゴリズムと署名:トークンのalgには、対応している署名アルゴリズムが使用されている必要があります。署名されていないトークン(alg: none)は拒否されます。
    1. algがRS256の場合、Zoho Directoryは、IdPのディスカバリードキュメント内のjwks_uriから取得した公開鍵を使用して署名を検証します。
    2. algがHS256の場合、Zoho Directoryはクライアント認証情報を使用して署名を検証します。
  2. 有効期限:expクレームが存在し、将来の時刻を示している必要があります。
  3. 発行時刻と有効開始時刻のタイムスタンプ:iatクレームとnbfクレームが将来の時刻を示していないことを確認します。
いずれかの確認に失敗すると、サインインは拒否されます。

7. ユーザーの関連付け

トークンの検証に成功すると、Zoho Directoryは対応するユーザーアカウントを識別し、IdPから受信したユーザー属性をディレクトリユーザーに関連付けます。Zoho Directoryは、subクレーム(IDトークンに含まれる、IdP上のユーザー固有かつ永続的なID)を使用して、IdPのユーザーとディレクトリユーザーを照合します。
  1. 関連付け済みのユーザー:このIdPユーザー(sub)が以前にサインインしたことがある場合、Zoho Directoryは関連付け済みのアカウントを使用します。
  2. 初回サインイン:ユーザーが初めてサインインする場合、Zoho DirectoryはIDトークン内のemailに一致するユーザーを検索し、そのユーザーをIdPに関連付けます。
  3. 一致するユーザーがいない場合:IDトークン内のメールに一致するユーザーがいない場合、Just-In-Time(JIT)プロビジョニングを使用して、トークン内の名前とメールから新しいユーザーが作成されます。JITプロビジョニングが有効になっていない場合、サインインは拒否されます。
  4. ポリシーの確認:ユーザーが組織に所属し、ユーザーのサインインポリシーにこのIdPが含まれている必要があります。

8. アクセスの許可

ユーザーが識別され、関連付けられると、Zoho Directoryはユーザーのサインインポリシーを確認します。
MFAが必要な場合、ユーザーはセッションが作成される前にMFAを完了する必要があります。その後、Zoho Directoryはブラウザーに独自のサインインセッションを作成します。IDトークンとアクセストークンはサインイン後に破棄され、保存されません。

9. サインアウトフロー

Zoho Directoryからサインアウトしても、終了するのはZohoのセッションのみです。IdP上のユーザーセッションは個別に管理され、Zohoからサインアウトしても終了しません。IdP上のユーザーセッションは有効なままです。完全にサインアウトするには、ユーザーはIdPからもサインアウトする必要があります。