OmniのダッシュボードやAIチャット機能を提供するアプリに簡単に埋め込み可能!Standard SSOのEmbeddingを試してみた

OmniのダッシュボードやAIチャット機能を提供するアプリに簡単に埋め込み可能!Standard SSOのEmbeddingを試してみた

2026.01.04

さがらです。

Omniでは、ダッシュボード・WorkbookのExplore・AIチャット機能をEmbedding(埋め込み)できる機能があります。(先日、NotionへのEmbeddingを試していました。)

https://docs.omni.co/embed

OmniのEmbeddingの方法は大きく「Standard SSO」と「2-step SSO」の2種類があるのですが、今回は「Standard SSO」について試してみたので、本記事で内容をまとめてみます。

Standard SSOと2-step SSOの違い

以下は公式Docの情報を参考にAIにまとめてもらった内容ではありますが、このような違いがあります。

観点 Standard SSO 2-step SSO
ざっくり何が違う? 署名付きログインURLを1本作って iframe に渡すだけでログインまで完了する「1ステップ」方式 (1) POSTでセッション生成 → (2) redeem URLで遷移の「2ステップ」方式
フロー(手順) 1. サーバー側で署名付きURL生成
2. iframe の src に設定して表示
1. POST /api/unstable/embed/sso/generate-session で sessionId を発行
2. embed/sso/redeem-session の署名付きURLで sessionId を redeem(iframe に設定)
パラメータの渡し方 主に URLクエリで渡す(contentPath, externalId, name, userAttributes, フィルタなど) 多くは POSTのJSONボディで渡す(contentPath, externalId, name, 権限/属性など)
URLは主に sessionId / nonce / signature(+theme/prefersDark)
機密データ(例:userAttributes)の扱い URLに載り得るため、運用によっては ログ/履歴/解析ツールなどへの露出が気になることがある 機微な属性を POSTに寄せられるため、URL露出を抑えたい場合に有利
URL長制限リスク パラメータが増えるほど URLが長大化し、ブラウザ等のURL文字数上限に当たる可能性が相対的に上がる redeem URLがコンパクトになり、URL長制限リスクをほぼ回避できる
必要な認証要素 Embed secret による URL署名(※URLは必ずサーバー側で生成推奨) ステップ1:**Omni API Key(Bearer)**でPOSTを認証
ステップ2:Embed secret による redeem URL署名
セッション有効期限の考え方 通常の embed セッション(管理画面の Session Length 設定に従う) 発行直後の embed セッションは 5分以内にredeem必須(未redeemだと無効)
redeem成功後に **24時間(またはSession Length)**へ延長
実装の難易度 簡単:サーバーで署名付きURLを作って iframe に渡す やや複雑:API呼び出し、sessionId管理、redeem用署名生成が必要(ただしURLは短く保てる)
署名のイメージ 「ログインURL(多数のクエリ付き)」を署名して検証してもらう 「redeem URL + nonce + sessionId(必須) + theme/prefersDark(任意)」を決められた順序で連結して署名する
どんなときに選ぶ? まずは最短で埋め込みを動かしたい、URLパラメータが増えない/機密性が問題になりにくい userAttributes等の機微情報がある、URLが長くなりそう、より堅牢に運用したい

個人的には、この2つの差分は「ログインURLに何を載せるか」と「セッションをいつ・どこで確定させるか」に集約されると思っています。Standard SSO は “署名付きURLを作って渡すだけ” なので実装がシンプルで、まず動かすには最短ルートです。一方で、ユーザー属性や権限、フィルタなどを詰め込んでいくとURLが長くなりやすく、場合によっては URL 経由で情報が露出する点(ログ、履歴、解析ツール等)が気になってきます。

2-step SSO はこのURL経由で情報が露出する点をカバーしており、ユーザー情報の大半をPOST(JSON)側に寄せ、URLは「sessionIdをredeemするための最小限」にする設計です。その代わり、APIキーの管理や sessionId の扱い、redeem用署名の生成などが増えるので、実装はやや手間になります。

まとめると、Standard SSOで十分なケースが多い一方で、「userAttributes に機微なデータを載せたい/URL長が不安/より堅牢に運用したい」という要件が出てきたら 2-step SSOを検討するのが良いと思います。

事前準備:OmniのEmbedding機能を有効化

OmniのEmbedding機能はデフォルトでは有効化されていないため、カスタマーサポートなどに連絡して、OmniのEmbedding機能を有効化してもらいます。

有効化すると、Settingsの項目にEmbedが追加されます。

2026-01-04_06h56_18

事前準備:OmniでEmbeddingしたいコンテンツを作成

EmbeddingするにはOmniで事前にダッシュボードなどのコンテンツを作成しておく必要があります。

今回は以下のようにダッシュボードを作成しておきました。

2026-01-04_08h10_52

また、EmbeddingするためにURLを確認しておきます。今回で言うと、先頭のOrganization名と、/dashboards/51e24001を、後で使用します。

2026-01-04_08h13_44

Omni上でEmbedding用のSecretを生成

OmniのトップページからSettingsを押して、Embedを開きます。

2026-01-04_06h56_18

次に、Embed Secret欄で一度Press the "Reset Secret”の横のUnlockを押してから、Confirmを押し、Reset Secretを押します。

2026-01-04_15h33_38

2026-01-04_15h33_52

2026-01-04_15h34_53

するとこのようにSecretが表示されるので、コピーして保持しておきます。(この画面で一度だけしか表示されないため注意しましょう。)

2026-01-04_15h35_44

デモ用のアプリからEmbeddingを試してみる

次に認証用のデモアプリが必要となるのですが、Claude CodeとAntigravityを使って、簡単なFlaskアプリを作成しました。Publicにしているため、以下のリポジトリから利用できます。(パッケージ管理にuvを使用しているため、ご注意ください。)

https://github.com/SSchneider22/omni-embed-standard-sso-demo

.envファイルにSecretなど必要な情報を書く仕様となっているので、.envファイルを作成し、以下のように5つの値を記入してください。

OMNI_EXTERNAL_IDOMNI_USER_NAMEは、自由に入力して問題ありません。ここで入力した値で、Omni側で自動でユーザーが作成されます。

変数名 説明
OMNI_EMBED_ORG_SLUG 組織スラッグ blobsrusなどOmniのURLのOrganization名
OMNI_EMBED_SECRET Embed Secret Settings > Embed > Admin で取得
OMNI_CONTENT_PATH 埋め込むコンテンツのパス /dashboards/12345678
OMNI_EXTERNAL_ID 外部ユーザーID user-001
OMNI_USER_NAME ユーザー表示名 Demo User

今回は以下のように入力しました。

2026-01-04_15h45_01

この上で、uv run python app.pyを実行してアプリを立ち上げます。

2026-01-04_15h51_06

その後にブラウザからhttp://localhost:8000/にアクセスすると、Omni上で作成したダッシュボードが特に認証を挟まずとも表示されました!

2026-01-04_15h53_51

Omniのユーザー欄を確認してみると、Embedタブに新しいユーザーが作成されていました。今回はEmbedding用のユーザーには特にグループを割り当てておらず権限も付与していなかったのですが、Viewerの権限が付与されていました。(公式Docによると、コンテンツのパスがダッシュボードの場合Viewer権限が付与されるようです。)

また上述のViewer権限以外を付与する場合、Embedding時のOmniに対する権限はConnectionの画面で設定できるBasicアクセスロールが考慮されないため、Embedding用のユーザー作成時にconnectionRolesgroupsの指定が必要となります。

2026-01-04_16h00_28

2026-01-04_16h09_34

AIチャット機能を埋め込んでみる

OmniのEmbedding機能は、Omniの画面上で使えるAIチャット機能も埋め込めるため、試してみます。

https://docs.omni.co/embed/customization/ai-chat

ConnectionのIDを確認

利用したいConnectionの画面で、Connection IDを確認します。

2026-01-04_16h30_30

対象のModelでAIチャットで使用できるTopicを制限

AIチャットで使用可能とするTopicを制限します。

modelファイルで、下図のようにai_chat_topicsを入れて、AIチャットの利用対象とするTopicを入力します。

2026-01-04_16h34_32

注意点としては、Topic名を日本語にしている場合、WorkbookのTopic編集画面で確認できるNameai_chat_topicsに入れないといけないため、ご注意ください。

2026-01-04_16h35_38

埋め込み用のパラメータの設定

これでOmni側の準備は完了のため、以下のリポジトリを使って埋め込みの設定をしていきます。

https://github.com/SSchneider22/omni-embed-standard-sso-demo

.envファイルを編集するだけでよいのですが、ポイントは以下2点です。

  • OMNI_CONTENT_PATH/chatと入力
  • OMNI_CONNECTION_ROLES:JSON形式で、{"<確認したConnection ID>":"RESTRICTED_QUERIER"}と入力

2026-01-04_16h41_49

2026-01-04_16h42_21

アプリを起動してAIチャット機能が埋め込まれているか確認

uv run python app.pyを実行してアプリを立ち上げて、その後にブラウザからhttp://localhost:8000/にアクセスすると、下図のようにAIチャット画面が埋め込まれて表示されました!

2026-01-04_16h45_09

ちゃんと質問して、結果を得ることも出来ます。

2026-01-04_16h47_40

より埋め込み先のデザインに併せて表示をカスタムしたい場合

OmniのダッシュボードやAIチャット機能を埋め込む際、そのデザインを埋め込み先に併せたいことがよくあると思います。

そんなときは、カスタムテーマ機能を用いたり、AIチャット機能のアイコンやプロンプトのプレースホルダーなどを変更することが可能です!

詳細は以下の公式Docよりご確認ください。

https://docs.omni.co/embed/customization/themes

https://docs.omni.co/ai/settings#branding

Embedユーザーのセッションを削除する

OmniのEmbedユーザーのセッションは、OmniのEmbed画面のAdminタブで設定した時間(デフォルトだと24時間)有効なのですが、Omniの画面上からセッションを削除することも可能です。

Embed画面のSessionsタブから、対象のセッションの横の「︙」を押してDelete Sessionを押せばOKです。

※Embedの検証を行っていると以前のセッションが悪影響を及ぼすことがあるので、個人的にこれはとてもありがたい機能です!

2026-01-04_16h24_02

最後に

OmniのダッシュボードやAIチャット機能を提供するアプリに簡単に埋め込みできる、Standard SSOのEmbedding機能を試してみました。

OmniのEmbedding機能は、権限管理含めたユーザーの動的な作成ができるのが素晴らしいですね!AIチャット機能も簡単に埋め込めるため、提供しているアプリケーションのデータをユーザーに自由に自然言語で分析してもらうインターフェースもすぐに構築可能です。

この記事をシェアする

FacebookHatena blogX

関連記事