Advantech

開発者ガイド (詳細版)

既存システムへの Advantech サインインの組み込みや本番運用を行うエンジニア向けです。構成、設定項目、このサイトが提供するライブラリと API、そして自分で開発しなければならない部分を説明します。

構成と役割分担

サインインは SSO が担当しますが、「誰がサインイン中か」はサイト自身のセッションで決まります。Client Secret はバックエンドにだけ置きます。

構成要素場所担当
ブラウザーユーザーの PCサインインページ / ボタン / ユーザーバッジを表示 (advantech-sso.js)。サイトの /auth/* だけを呼び、秘密情報は持ちません。
バックエンド自分のサーバーClient Secret を保管し、/auth/login と /auth/callback を処理、自分のセッションを作成・確認し、ページと API を保護します。
Advantech SSOhttps://ae-sso.advantech.comMicrosoft サインイン、サービス間シングルサインオン、許可 / 拒否リスト、ユーザー情報と写真、サインイン記録。
Microsoft Entra IDlogin.microsoftonline.comパスワード、MFA、条件付きアクセス。サイトが直接やり取りすることはありません。

サインインの 7 ステップ

  1. ユーザーがサイトを開くブラウザー

    サイトはまだサインインしていないことに気づきます。

  2. ユーザーを SSO に送るバックエンド

    バックエンド (/auth/login) がランダムな確認値 (state) を付けてブラウザーを SSO にリダイレクトします。

  3. 誰なのかを確認SSOMicrosoft

    SSO はサインイン済みかを確認し、まだなら Microsoft で会社のアカウントとパスワードを入力してもらいます。

  4. ユーザーをサイトに戻すSSO

    SSO は一度だけ使える「チケット」(code) と確認値を付けて、ブラウザーを /auth/callback に戻します。

  5. チケットをユーザー情報に交換バックエンド

    バックエンドは確認値を照合し、「チケット + Client Secret」で SSO から名前・メール・部署などを受け取ります。この手順はブラウザーから見えないため、シークレットは安全です。

  6. サインイン済みとして記憶バックエンド

    バックエンドはユーザー情報を自分のセッションに保存します。以降のリクエストはセッションを見るだけで、SSO に問い合わせる必要はありません。

  7. ページに名前と写真を表示ブラウザー

    advantech-sso.js がサイトの /auth/me を呼んで現在のユーザーを表示します。

ユーザーに実際に見えるのは「サイトを開く → (初回のみ) Microsoft のサインイン画面 → サイトに戻る」だけです。他の手順は数ミリ秒で自動的に終わります。

設定すること

SSO 側 (SSO 管理者またはサービス担当者が設定)

項目必要性説明
サービスの追加必須Client ID と Client Secret を取得します。サービス担当者は「マイサービス」から申請できます。
Redirect URI必須使うアドレスはすべて登録します。本番とローカルは別々に登録します (例: https://myapp.advantech.world/auth/callback と http://localhost:5000/auth/callback)。完全一致が必要です。
このサービスが取得できるデータ推奨サイトが本当に必要な項目 (部署、上司など) だけを許可します。同じ上司のメンバーと生データは既定でオフです。
データのマスキング任意管理者は特定の人の特定の項目を * で隠せます (例: 役員の携帯番号)。項目は残り、各人に masked と masked_fields が付くのでプログラムで判定でき、フロントエンド キットはマスキングされた値を自動で「非表示」と表示します。サインインした本人の自分のデータはマスキングされません。
許可リスト(許可) / 拒否リスト(禁止)任意サインインできるアカウントやドメインを制限します。拒否されたユーザーはサイトに到達しません。
ユーザー・グループ API デバイス任意誰もサインインしていない状態でサーバーがユーザーを照会する場合 (バッチ、同期) のみ。最高管理者がオンにしてデバイスを登録します。

自分のサーバー

項目必要性説明
SSO_CLIENT_ID
SSO_CLIENT_SECRET
必須SSO から取得します。シークレットは環境変数かシークレット管理にだけ置き、コード・HTML・Git には入れません。
APP_URL必須サイトの公開アドレス (スキーム + ホスト + ポート)。Redirect URI の組み立てに使います。ユーザーはこのアドレスでサイトを開く必要があります。
FLASK_SECRET_KEY / SESSION_SECRET必須セッション cookie に署名する鍵。32 バイト以上で固定にします。再起動のたびに変わると全員がサインアウトされ、error=state になります。
HTTPS必須本番は https 必須 (セッション cookie を Secure にするため)。http はローカルの http://localhost のみ。
セッションの保存先推奨Node / Go のテンプレートはセッションをメモリに置くため、再起動で消え、複数サーバーで共有されません。本番では Redis かデータベースを使ってください。
Cookie の設定推奨HttpOnly、Secure (https)、SameSite=Lax。SameSite=Strict は使わないでください (SSO から戻るときに cookie が送られません)。
外部への接続必須バックエンドから https で https://ae-sso.advantech.com に接続できる必要があります (/token、/userinfo の呼び出し)。
Content-Security-Policy任意CSP を設定している場合: script-src / style-src に https://ae-sso.advantech.com を追加 (または自分でファイルを置く)、写真用に img-src にも追加。
時刻同期 (NTP)任意ユーザー・グループ API を使う場合、デバイスが署名する JWT の有効期間は短いため、サーバーの時刻誤差は 1 分以内にしてください。
# .env (never commit this file)
SSO_CLIENT_ID=svc_xxxxxxxx
SSO_CLIENT_SECRET=xxxxxxxx
APP_URL=https://myapp.advantech.world
SESSION_SECRET=<64 random characters: openssl rand -hex 32>

そのまま使えるライブラリと API

以下のファイルは URL で直接参照するか、ダウンロードして自分のサイトに置けます。URL は固定で、名前は変わりません。

フロントエンド (HTML / CSS / JS)

ファイルURL説明
advantech-sso.jshttps://ae-sso.advantech.com/assets/js/advantech-sso.js ダウンロード サインインボタン、ユーザーバッジ、項目表示、未サインイン時の自動リダイレクト、多言語。依存なし、約 10 KB。
advantech-sso.csshttps://ae-sso.advantech.com/assets/css/advantech-sso.css ダウンロード サインインページ、ボタン、バッジのスタイル。クラスはすべて adv-sso- で始まり、既存のスタイルに影響しません。
logo.svghttps://ae-sso.advantech.com/static/logo.svg ダウンロード Advantech ロゴ (青地に白)。
login.htmlhttps://ae-sso.advantech.com/developers/files/login.html ダウンロード サインインページの完全なテンプレート。
index.htmlhttps://ae-sso.advantech.com/developers/files/index.html ダウンロード 保護されたページのテンプレート (名前、部署、写真)。

本番では JS / CSS をダウンロードして自分のサイトに置くと、SSO のメンテナンスの影響を受けません。直接参照すれば常に最新版です。

バックエンドのテンプレート

言語ファイル完全なテンプレート
Python / Flaskflask_app.py ダウンロード .zip
Node.js / Expressexpress_app.mjs ダウンロード .zip
PHPsso.php ダウンロード .zip
C# / ASP.NET CoreProgram.cs ダウンロード .zip
Java / Spring BootSsoController.java ダウンロード .zip
Gomain.go ダウンロード .zip

バックエンドに SSO 専用パッケージは不要です。各言語の標準的な HTTP とセッション機能だけを使います (Flask、Express、PHP curl、ASP.NET Core、Spring Boot、Go 標準ライブラリ)。

SSO の API

API呼び出し元認証方法説明
GET /authorizeブラウザー—パラメータ:client_id、redirect_uri(登録済みのものと完全一致)、response_type=code、state(ランダム値を使い、戻ったときに照合) prompt →
POST /tokenバックエンドClient ID + Secretフォームパラメータ:grant_type=authorization_code、code、redirect_uri、client_id、client_secret(HTTP Basic も可)。code は一度きりで 60 秒間有効です。
GET /userinfoバックエンドBearer access_tokenAuthorization: Bearer <access_token> を付けるとユーザー情報を返します。アクセストークンの有効期間は 1 時間です。
GET /userinfo/photoバックエンドBearer access_tokenユーザーの写真 (サービスに「写真」項目の許可も必要)。
GET /photo/{token}ブラウザー署名付き URL (7 日間)<img src> にそのまま使える写真の URL (写真がなければ含まれない)
GET /logoutブラウザー—SSO からサインアウトします。?redirect_uri= を付けると登録済みサイトの URL に戻れます。
GET /api/directory/…登録済みデバイスデバイスの秘密鍵で署名した JWTAzure オブジェクト ID、UPN またはメールでユーザー 1 件 (/userinfo と同じ形式、サービスが見られる上司・部下・グループなどを含む)。 →

prompt パラメーター (サインイン画面の制御)

/authorize に prompt を付けると、今回のサインインで画面を表示するか、パスワードを再入力させるかを決められます。テンプレートの /auth/login?silent=1 は prompt=none です。

promptユーザーに見えるもの使う場面
(指定なし)いずれかのサービスでサインイン済みなら画面なしで通過。そうでなければ Microsoft のサインイン画面 (Microsoft が覚えていればそのまま通過することも)。通常の「サインイン」ボタン。
none画面は一切表示しません。SSO にサインイン済みなら code 付きで戻り、未サインインなら error=login_required、権限がなければ error=access_denied。サイトを開いたときに自動でシングルサインオンを試み、失敗したときだけ自分のサインインページを表示。
select_accountMicrosoft の「アカウントを選択」画面。既存のアカウント (通常パスワード不要) か「別のアカウントを使用」を選べます。「アカウント切り替え」ボタン、複数人で共用する PC。
login必ずアカウントとパスワードを再入力 (会社の MFA も)。SSO や Microsoft にサインイン済みでも同じです。重要な操作の前の本人再確認 (承認、権限変更、給与情報など) や機密性の高いシステム。
# 画面なしで、自動サインインできるかだけ試す
https://ae-sso.advantech.com/authorize?client_id=svc_xxxxxxxx&redirect_uri=…&response_type=code&state=RANDOM&prompt=none

# パスワードを必ず再入力させる
https://ae-sso.advantech.com/authorize?client_id=svc_xxxxxxxx&redirect_uri=…&response_type=code&state=RANDOM&prompt=login

# テンプレートの /auth/login に prompt を追加
q["prompt"] = "login"                      # Python  (/auth/login)
q.set("prompt", "login");                  // Node.js
$q['prompt'] = 'login';                    // PHP

ログアウト URL のパラメーター (/logout)

パラメーター説明
redirect_uriサインアウト後に戻るアドレス。登録済みサービスのアドレス (同じドメイン) である必要があります。
microsoft=1今回は Microsoft アカウントからもサインアウトし、次回は必ずパスワードを求めます (同じブラウザーの Outlook、Teams Web 版もサインアウト)。
microsoft=0管理者が「Microsoft からもサインアウト」をオンにしていても、今回はサイトと SSO だけサインアウト。
(指定なし)管理者の「Azure AD 設定 → サインアウトの動作」に従います (既定は SSO のみ)。

自分で開発する部分

SSO とフロントエンドキットが大部分を処理します。残りは必ずバックエンドで実装します。Client Secret の保管と「誰が何をできるか」の判断は、自分のサーバーにしかできないからです。

機能担当説明
パスワード、MFASSO が提供Microsoft が処理します。サイトがパスワードを見ることはありません。
サービス間シングルサインオンSSO が提供どれかのサービスでサインインすれば、他は自動で通過します (テンプレートの /auth/login?silent=1)。
ユーザー情報、写真、上司 / 部下SSO が提供サインイン時に一緒に返します。項目はサービスのデータ権限に従います。
サインインボタン、ページ、ユーザーバッジフロントエンドキットが提供advantech-sso.js / .css と login.html。
/auth/login自分で実装 (テンプレートあり)ランダムな state を作って SSO にリダイレクト。
/auth/callback自分で実装 (テンプレートあり)state を確認し、code と Client Secret で /token を呼び、セッションを作成。必ずバックエンドで (Client Secret が必要なため)。
/auth/me自分で実装 (テンプレートあり)現在のユーザー JSON をフロントエンドキットに返す。未サインインなら 401。
/auth/logout自分で実装 (テンプレートあり)自分のセッションを消し、SSO の /logout にリダイレクト。
セッション管理自分で実装 (テンプレートあり)有効期間、保存先、サインイン後のセッション ID 更新。
ページと API の保護自分で実装 (テンプレートあり)サインインが必要なページと API はすべてバックエンドでセッションを確認します。フロントエンドでボタンを隠すのは保護になりません。
権限 (誰が何をできるか)必ず自分で開発SSO が伝えるのは「誰か」と部署・グループなどの属性です。「AE 部門だけ編集可」といったルールは自分のシステムで判断します。
自システムのユーザー情報必ず自分で開発ユーザーを保存する場合 (設定、注文など) は sub をキーにします。メールは改名で変わります。
ユーザー情報の更新任意サインイン時の情報はセッションに残ります。最新の情報が必要なら access_token の有効期間 (1 時間) 内に /userinfo を呼ぶか、もう一度サインインしてもらいます (自動で通過)。
全サービス一括サインアウト任意現在は未対応です。SSO のサインアウトは SSO の状態だけを終了し、各サイトのセッションはそれぞれの期限で切れます。
サーバーからのユーザー照会 (ユーザー・グループ API)任意必要な場合はデバイスで鍵を作り、署名した JWT で /api/directory/* を呼びます (基本版の「ユーザー・グループ API」参照)。

本番前チェックリスト

Advantech Single Sign-On