Odooポータルは、顧客とパートナーに関連する文書、取引、サービスへのアクセスを提供します。そのため、ID設計の課題が生じます。外部ユーザーは従業員ディレクトリとアクセスモデルを共有すべきでしょうか。

ワークフォース テナント内のビジネス ゲスト アカウントで十分な場合もあります。より大規模な環境や、ブランド化された顧客サインインとセルフサービス登録が必要な場合は、Microsoft Entra External IDが専用の顧客IDおよびアクセス管理モデルを提供します。

このモデルをOdooに接続すると、内部ユーザーとポータルユーザーの境界をより明確にできます。ただし、その境界には、明示的な承認、アカウント作成、Odooの認可ルールが引き続き必要です。

ワークフォース テナントと外部テナントは、異なる対象向けに設計されています

Microsoftでは、ワークフォース テナントを、従業員、社内ビジネス アプリケーション、組織リソースのための環境と定義しています。招待されたビジネス パートナーやゲストも含めることができます。外部テナントは、コンシューマーや法人顧客向けアプリケーションのための別構成です。Microsoftはこの違いをテナント構成ガイダンスで説明しています。

外部テナントには、独自の顧客ディレクトリとアプリケーション登録が含まれます。External IDは、セルフサービス登録、サインイン、パスワード リセット、アカウント管理、IDプロバイダー フェデレーションを追加します。External IDの概要では、この専用モデルが説明されています。

この分離により、Odooサービスへのアクセスが必要だからといって、顧客を従業員として扱ってしまうことを避けやすくなります。

サインインを設定する前に対象ユーザーを決める

Odooの対象ユーザーには、少なくとも3つの明確な種類があります。

従業員と社内ユーザー

これらのユーザーは通常、組織のワークフォース テナントに属します。Odooへの利用が認められる場合は、通常、適切にマッピングされたアクセス グループを持つ社内Odooユーザー アカウントが必要です。

承認済みパートナー組織の人員

一部の企業では、定義済みの顧客またはパートナーのEntraテナント一覧に属するユーザーを受け入れたい場合があります。すべての組織が把握され、アクセスが契約上承認されている場合は、正確なテナント許可リストを持つマルチテナントのワークフォース接続が適していることがあります。

テナントの検証は重要です。ドメインとメールアドレスは変更可能なため、メール ドメインだけを照合しても不十分です。接続設計に従って、トークンのテナントと、変更不可能なsubjectまたはobject IDを検証してください。

顧客と外部ユーザー

顧客向けアプリケーションでは、External IDテナントが別のディレクトリとサインイン体験を提供できます。この対象向けに作成するOdooアカウントは、通常、内部ユーザーではなくポータル ユーザーであるべきです。

これらのモデルは、利用条件やOdooアカウントのルールが異なる場合、別々の接続として構成する必要があります。1つの広範な接続は、理解しづらく、設定ミスも起こしやすくなります。

External IDは顧客のサインイン フローをサポートします

External IDのユーザー フローでは、顧客の認証方法とサインアップ時に収集する情報を定義します。サインアップとサインインを有効にするには、フローを登録済みアプリケーションに関連付けます。MicrosoftはこれをExternal IDユーザー フローへのアプリケーション追加で説明しています。

External IDは、Microsoft Entra IDやカスタムのOpenID Connectプロバイダーを含むローカル アカウントとIDプロバイダー フェデレーションをサポートできます。Microsoftの顧客属性ガイダンスで説明されているように、サインアップ時に組み込み属性とカスタム属性を収集できます。

Odooが本当に必要とする情報だけを収集し、各属性の目的、保持期間、プライバシー上の取り扱いを文書化してください。

既定の権限は分離の維持に役立ちます

Microsoftによると、外部テナントのユーザーは制限された既定の権限から始まります。通常はアプリケーションにアクセスし、自分のプロファイルを管理できますが、広範なディレクトリ管理権限は付与されません。外部テナントの既定の権限を参照してください。

そのディレクトリ境界は、Odooのポータル権限を自動的に設定するものではありません。Odooは、独自のアクセス権とレコード ルールを通じて、ポータル ユーザーが閲覧できるレコードを引き続き管理します。代表的な顧客レコードと、複数の会社またはアカウントを使ってポータル体験をテストし、データが正しく分離されていることを確認してください。

別途承認済みの業務プロセスがない限り、新しく作成した外部ユーザーを内部Odooユーザーに昇格させないでください。

最新の検証済みOpenID Connectフローを使用する

Microsoftは、サーバー ベースのWebアプリケーション向けに、Proof Key for Code Exchange付きのOAuth 2.0認可コード フローとOpenID Connectをサポートしています。認可コード フローのドキュメントでは、この対応する組み合わせが説明されています。

OIDCは、認証のためにOAuth 2.0を拡張します。Microsoftは、検出メタデータ、エンドポイントの詳細、公開署名鍵を公開しています。また、リプレイ リスクを減らすため、返されたトークンの検証とnonceの確認を推奨しています。Microsoft identity platformにおけるOpenID Connectを参照してください。

安全な統合では、期待されるissuer、audience、署名、テナント コンテキスト、nonceを検証する必要があります。PKCEは、トークン検証、正確なコールバック設定、TLS、クライアント シークレットの保護に取って代わるものではありません。

基本的なサインインでは、openid、profile、emailなどの標準的なOIDCスコープを要求できます。Microsoftは、これらのスコープはMicrosoft Graph上にホストされており、アプリケーションに必要な権限のみを要求することを推奨しています。Microsoft identity platformのスコープを参照してください。したがって、正確な製品上の表現は「標準サインインでは高権限のMicrosoft Graph API権限は不要」であり、Graphが関与しないという包括的な主張ではありません。

外部ユーザーがOdooにアクセスする方法を決める

最初のサインインを有効にする前に、次を定義してください。

  • セルフ登録を公開にするか、承認を必須にするか。
  • どのテナントまたはIDプロバイダーを受け入れるか。
  • 既存のOdooポータル アカウントをリンクできるか。
  • リンク後に保存される変更不可能な Microsoft 識別子はどれか。
  • ユーザーが所属する Odoo の会社とパートナーはどれか。
  • どのポータルグループとレコードルールが適用されるか。
  • アクセスが取り消されたときに何が起こるか。
  • アクティブな Odoo セッションがどのように失効されるか。

アカウントの自動作成は管理負担を軽減できますが、接続の受け入れルールを ID が満たした後にのみ実行すべきです。Microsoft の認証に成功したことは、受け入れられた ID の制御権を証明します。それだけでは、その人物が特定の顧客の Odoo レコードを閲覧すべきかどうかは証明しません。

顧客サポートと復旧の計画

外部ユーザーには社内ヘルプデスクがない場合があります。サポート経路を公開し、ID を誰が管理するかを明示してください。パスワードリセット、復旧、テナント削除、メールアドレス変更のシナリオをテストしてください。診断イベントは有用でありながら、必要に応じてマスキングしてください。

すぐに必要なのが従業員アクセスであれば、Microsoft SSO で Odoo インスタンスを保護すべき理由をお読みください。内部権限については、Entra グループとアプリロールで Odoo アクセスを一元化する方法をご覧ください。

外部オーディエンスを Odoo 19 に接続する

当社のOdoo 向け Microsoft Entra SSO モジュールは、従業員、承認済み組織、Microsoft Entra External ID の顧客オーディエンス向けに個別の接続をサポートします。External ID の接続は既定でポータルユーザーを作成し、ワークフォース接続は内部ユーザーを作成します。ガイド付きセットアップでは、検出情報と署名キーが検証され、その後、Microsoft サインインを有効にする前に対話型テストが必要になります。

このモジュールは、誰を受け入れるべきか、またはどの顧客レコードを閲覧できるべきかを判断しません。それらは引き続きビジネス上の判断と Odoo のアクセス判断です。Microsoft の顧客 ID と Odoo 19 ポータルの間に、制御された連携が必要で、単一の区別されないログイン経路ではなく、対象オーディエンスごとのアカウント処理が必要な場合に、このモジュールを検討してください。