TANASUKE Account の仕組み
— ひとつのアカウントで、すべてのサービスへ —
TANASUKE の各サービス(アプリや管理画面)は、共通の「TANASUKE Account」でサインインします。このページでは、その裏側で動いている仕組み(OIDC・IdP・RP・SDK)を、IT の専門知識がなくても読めるように図で説明します。
01登場人物 — 受付・会員窓口・各施設
IdPTANASUKE Account
Identity Provider(身元の提供者)。メールアドレス・氏名・ログイン手段など「その人が誰か」を唯一保持する正本。サインイン画面もここが出します。
RP各サービス
Relying Party(受付を信頼する側)。アプリや管理画面のこと。自前でパスワードを持たず、IdP の判断を信頼して利用者を受け入れます。
RP入会システム
RP のひとつですが特別な役割を持ち、「誰にどの役割(ロール)を与えるか」を決める会員窓口です。
SDK開発キット
各サービスが IdP と正しく会話するための部品。開発者が毎回ゼロから作らずに済み、間違いも防げます(第7章)。
OIDC共通ルール
OpenID Connect。「受付で本人確認し、施設に身分証を渡す」やり取りの世界標準の手順書。Google や Apple のログインも同じ仕組みです。
02サインインの流れ — 施設は受付に確認を頼む
ポイント
- 一度サインインすれば、他のサービスにも入れる(シングルサインオン)。受付が「さっき確認済み」と覚えているためです。
- 身分証(トークン)には有効期限があり、期限が切れたら受付に再確認します。退会・停止されると再確認で止まります。
- サインアウトは受付にも伝わり、全サービスのセッションが片付きます(end-session)。
03身元の正本は IdP — サービスは「写し」しか持たない
| できごと | どこで行う | 各サービスへの反映 |
|---|---|---|
| メールアドレスの変更 | TANASUKE Account のマイページ | 次回サインイン時、または通知(プロビジョニング)で自動反映 |
| パスワード変更・2段階認証 | TANASUKE Account | サービス側は関与しない(そもそも保持していない) |
| 退会・利用停止 | 入会システムで申請 → IdP で停止 | 全サービスで即座にサインイン不可・既存セッションも失効 |
| サービス固有の設定・データ | 各サービス | そのサービス内で完結(IdP は関知しない) |
04ロール(役割)— 定義はサービス、決定は入会システム、配布は IdP
- サービスが役割の種類を決める。「このサービスには owner/admin/staff/member がある」と宣言し、SDK で IdP に登録します(サービスの都合で増減できます)。
- 入会システムが人に役割を割り当てる。会員窓口の管理画面で「田中さんはサービスAの admin」と決めると、IdP の台帳(grant)に書き込まれます。
- IdP がサインインのたびに配る。身分証(トークン)の
rp_roleに役割が載って各サービスへ届きます。役割が変わったときは IdP から各サービスへ通知(provision webhook)も飛びます。 - 各サービスは受け取った役割で出し分ける。管理メニューの表示や操作の可否をこの役割で判断します。サービスが独自に役割を書き換えることはしません(正本は IdP)。
※ 入会システムの管理者自身も IdP でサインインします。「入会システムでの役割=サービスAでの役割」ではなく、サービスごとに独立して設定できます。
05サーバー同士の通信(M2M)— 人がいなくても安全に、許可は IdP が判断
安全に疎通できる理由
通信は常に HTTPS(TLS)。証明書は正規の認証局(Let's Encrypt)発行で、経路上で中身を読まれたり書き換えられたりしません。サーバーが別でも同じです。
認可を IdP が担保する理由
「A が入会システムの会員プロフィールを読める」という許可は IdP の許可表にだけ書かれ、各サービスの設定では増やせません。鍵(client secret)を持っていても、許可表にない範囲は取れません。
許可証(scope)の粒度
「読む」「書く」「削除」を分けて許可します。例: membership:read.profile(読む)、idp:write.grants(役割の更新・自分のサービスの分だけ)。
人の操作と組み合わせる場合
「田中さんの代わりに A が入会システムを読む」ときは、田中さんの身分証と A の許可証を両方添えます(トークン交換)。本人が許可していない範囲は読めません。
06各サービスは独立して動く — 同期は「自分のルール」で
独立しているとは
- 障害の切り分け: あるサービスが止まっても他のサービスと IdP は影響を受けません。IdP が一時的に止まっても、サインイン済みの利用者はそのサービス内の作業を続けられます(新規サインインと役割変更だけ待ちになります)。
- 更新の独立: サービスごとに別々の日に改修・入れ替えができます。共通で守るのは OIDC の手順と SDK の使い方だけです。
- データの独立: 業務データ(受注、投稿、履歴など)はサービス内に閉じます。IdP は「誰か・役割は何か」以外を持ちません。
同期の選び方(目安)
| 方式 | 向いている場面 | 反映の速さ |
|---|---|---|
| サインイン時に取り込む | 表示名や役割を画面に出すだけの一般的なサービス | 次回サインイン時 |
| 通知(webhook)を受ける | 退会・停止を即座に反映したい、データ整理が必要なサービス | 数秒以内(失敗時は IdP が再送) |
| 必要なときに照会(M2M) | 管理画面で一覧を出すとき、他サービスの情報を参照するとき | そのつど最新 |
07SDK — 各サービスが安全に IdP と話すための部品
Laravel(PHP)向け
tanasuke/idp-sdk。サインイン(RP)、許可証の検証(リソースサーバー)、他サービス呼び出し(サービスクライアント)、役割スキーマ登録、役割同期をひとまとめに提供。
Node / TypeScript 向け
@tanasuke/idp-sdk。同じ機能を Next.js や Express などの JavaScript 製サービス向けに提供。
新しいサービスを追加するとき
① IdP の設計書(manifest)にサービスを1件追記 → ② 発行された鍵をサービスの設定に入れる → ③ SDK を組み込み、役割の種類を登録。これで「TANASUKE Account でサインイン」対応になります。
08現在の構成と用語集
現在の構成
| 役割 | URL | 説明 |
|---|---|---|
| IdP | account.official.tanasuke.com account-api.official.tanasuke.com | TANASUKE Account。サインイン画面・マイページ・管理画面(サービス登録、役割台帳、監査ログ、SMTP など)。 |
| RP | membership.official.tanasuke.com membership-api.official.tanasuke.com | 入会システム(会員窓口)。会員登録・プロフィール・退会申請・人ごとの役割設定。 |
| SDK | tanasuke-idp-sdk / tanasuke-idp-sdk-js | 各サービス組み込み用の部品(GitHub で管理)。 |
証明書はすべて正規の認証局発行(HTTPS)。サーバーは自社管理で、送信メールは no-reply.tanakadaisuke@ptop.space から届きます。
用語集(やさしい言いかえ)
| 用語 | 言いかえ | ひとこと |
|---|---|---|
| OIDC(OpenID Connect) | 受付で本人確認して施設に身分証を渡す手順書 | 世界標準。Google・Apple のログインと同じ方式。 |
| IdP(Identity Provider) | 総合受付・身元の正本 | TANASUKE Account のこと。 |
| RP(Relying Party) | 受付を信頼する施設 | 各サービス・アプリ。入会システムも RP のひとつ。 |
| sub | 生涯変わらない会員番号 | メールが変わっても同じ人だと分かる。 |
| トークン(ID/アクセス) | 身分証・入場券 | 誰か・役割・有効期限が書かれた期限つきの券。 |
| 認可コード | 引換券 | 受付で受け取り、サービスが裏で身分証に交換する。 |
| PKCE | 引換券のすり替え防止 | 途中で券を盗まれても交換できないようにする仕掛け。 |
| scope | 許可の範囲 | 「読む」「書く」「削除」などを細かく分ける。 |
| M2M(client_credentials) | サーバー同士の通行許可 | 人がいなくても、許可表の範囲でやり取りできる。 |
| introspection | 券が本物か受付に確認 | 受け取った側が IdP に照会する。 |
| grant | 役割台帳の1行 | 「誰 × どのサービス = どの役割」。 |
| rp_role | 身分証に書かれた役割 | サービスごとに違ってよい。 |
| provision webhook | 変更の通知 | 役割変更・退会などを IdP から各サービスへ知らせる。 |
| SSO(シングルサインオン) | 一度の受付で全施設へ | 受付が「確認済み」を覚えている。 |
| manifest | IdP の設計書 | どのサービスがあり、どの許可があるかを書いたファイル。変更履歴が残る。 |
よくある質問
各サービスにパスワードは保存されていますか?
されていません。パスワードや認証コードを扱うのは TANASUKE Account だけです。サービスが受け取るのは期限つきの身分証(トークン)だけです。
あるサービスの役割を変えると、他のサービスにも影響しますか?
しません。役割はサービスごとに独立した台帳の行です。入会システムで「サービスAは admin、サービスBは member」のように別々に設定できます。
IdP が止まったらすべて使えなくなりますか?
新しいサインインと役割の変更は待ちになりますが、サインイン済みの利用者はそのサービス内の作業を続けられます。各サービスは自分のデータで動いているためです。
別の会社のサーバーにあるサービスとも連携できますか?
できます。通信は HTTPS で暗号化され、許可は IdP の許可表で管理されるため、サーバーの場所や運営者が違っても同じルールで安全に疎通できます。
Google や Apple のアカウントでサインインできますか?
仕組みとしては対応済み(IdP が Google/Apple を「上位の受付」として受け入れる)で、設定を入れれば有効化できます。現在は無効です。
