Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OpenID Connectによるサービス間連携
Search
Shigeki Shoji
June 25, 2026
Technology
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OpenID Connectによるサービス間連携
JJUG CCC 2026 Springの再演 + α
Shigeki Shoji
June 25, 2026
More Decks by Shigeki Shoji
See All by Shigeki Shoji
OpenID Connectによるサービス間連携
takesection
0
190
アーティファクト管理でサプライチェーン攻撃を回避!!
takesection
0
120
2025-12-19-LT
takesection
0
160
2025-12-11 nakanoshima.dev LT
takesection
0
170
アジャイルテストで高品質のスプリントレビューを
takesection
0
230
Introduction to kanjava
takesection
0
140
LT Slide 2025-04-22
takesection
0
230
Instructional Designer
takesection
0
210
Zero to Hero
takesection
0
280
Other Decks in Technology
See All in Technology
最近評価が難しくなった
maroon8021
0
340
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.4k
AI時代のエンジニアキャリアについて今一度考える
sakamoto_582
2
1.5k
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
13
2k
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
2.6k
SRE Next 2026 何でも屋からの脱却
bto
0
620
知らん間に、回ってる
ming_ayami
0
500
Zoom2Youtube.Claude
kawaguti
PRO
3
490
cccccc
moznion
0
1.9k
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
穢れた技術選定について
watany
3
310
AI時代の EM への処方箋
staka121
PRO
0
130
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
sira's awesome portfolio website redesign presentation
elsirapls
0
300
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
The Curse of the Amulet
leimatthew05
2
13k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
330
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
680
Building Adaptive Systems
keathley
44
3.1k
How to build a perfect <img>
jonoalderson
1
5.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
310
Transcript
OpenID Connectによる サービス間連携 2026年06月25日 Shigeki Shoji
庄司重樹 熊本大学大学院 教授システム学専攻 博士前期課程 ICTインストラクター / アジャイルコーチ e-Learning Professional SCORM技術者
好きな言語:Scala、Java
認可と認証 • 『リソースに対してアクセス許可を与えることを、「アクセス 認可」と呼ぶ』(崎村 2021) • OAuth 2.0は、プリンシパル(リソース所有者)がアプリケーションに 対して、自身の保持するコンテンツへの制限付きアクセスを安全に許 可するためのフレームワーク。
• 認証はデジタル世界にアクセスしようとするユーザが本人であ ることを証明・検証するプロセス。 3
4
認可 5
最小権限の原則 (1975年~) "Every program and every user of the system
should operate using the least set of privileges necessary to complete the job." システムのすべてのプログラムおよびすべてのユーザーは、業務 を完了するために必要な、最小限の権限のセットを使用して動作 する必要がある。 引用: https://www.cs.cornell.edu/fbs/publications/leastPrivNeedham.pdf 6
IBAC (Identifier Based Access Control) • 識別子ごとにアクセス制御 例えば、ユーザ名でアクセス制御 識別子ごとに制御を行うため、識別子の数が多くなると保守が 煩雑
7
RBAC (Role Based Access Control) • ユーザの属性にロールを導入し、ロールによってアクセス制御 例えば、管理者ロールはすべてのリソースへのアクセスを許可 し、監査ロールは特定のリソースの読み取りアクセスを許可 ユーザの動的な性質に基づく制御が困難
8
ABAC (Attribute Based Access Control) • ポリシーの爆発的増加を防ぎ、スケール可能に 属性値を評価してアクセス許可 9
RBACとABACの比較 • プロダクト管理者はプロダクトに関連するすべてのリソースへ のアクセスが許可される。プロダクトはA〜Cの3個ある。 10 RBAC ABAC ProductA_Administrator Product_Administrator "Condition":
{ “StringEquals”: { "aws:ResourceTag/Product": "${aws:PrincipalTag/Product}” } } ProductB_Administrator ProductC_Administrator
AWSマネジメントコンソールの例 IAMポリシー 11
ロールにAdministratorを含む場合 12
ロールにAdministratorを含まない場合 13
ABACの実装に使用できるOSS • Open Policy Agent Rego言語を使用してポリシーを記述 14
認証 15
OpenID Connect (OIDC) • OIDCは認証 認可リクエスト:アプリケーション (Client) が許可してほしい アクセスの内容 (openid、email、profile
等) を scope に指定 して取得 • openid が scope にある場合、id_token (JWT) を受け取ること ができる • id_tokenはあくまでも身元を証明するための「身分証明書」。 アクセス制御のための「通行許可証」として設計されていない 16
デジタルアイデンティティ • 現実世界は、関係性を深めるまでは匿名のまま対応が可能。デ ジタル世界は、関係性の有無に関わらずプリンシパルの同一性 を保証する必要があり、認証が必要になっている。 17
フェデレーション型 • アドホック・フェデレーション • ハブ&スポーク・フェデレーション • アイデンティティ連携ネットワーク 18
OIDCを使ったクラウドアクセス • AWS • IAMのIDプロバイダとIAMロールとでAWSリソースに対するアクセス 許可が可能 • IAMロールの認証情報からAWSマネジメントコンソールへのアクセスも可能なた め、自由度が高い •
Azure • Microsoft Entra IDに依存している • サードバーティのIDを登録して、Azure Portalにアクセスする仕組みがある 19
CI/CDで使用するOIDC • CI/CDパイプライン上のトークン • GitHub Actions • GitHub APIでid_tokenの取得が可能 •
GitLab CI/CD • 指定したAudience値でid_tokenを生成し環境変数に設定する • id_tokenを使用してリソースにアクセス • AWSやAzureの場合、IAMロールやEntra IDを通じてアクセス 20
トークン • オパークトークン • セッションID • 自己完結型トークン • JWT 21
id_token (JWT) • ヘッダ、ペイロード、署名で構成 • 各パートは、. (ドット) で区切られる • ヘッダ、ペイロードは、JSONをBase64エンコードした文字列
• 署名は、ヘッダで指定されたアルゴリズム (alg) で署名し、そ れをBase64エンコードした文字列 22
サンプル ヘッダ: { "kid": "+XmXtOKuo9H+8XTZve0e8EbYN+MuYRGAxR6xXbErZxM=", "alg": "RS256" } 23
サンプル ペイロード(一部省略): { "sub": "97149a88-40c1-707f-cc7b-c90ff631ee05", "iss": "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_gRg8qgDYf", "aud": "5tufr8vhh79bp9nppbs8fouikv", "exp":
1779615184, "iat": 1779611585, "email":
[email protected]
} 24
認可コードフロー 25
プロバイダ別のエンドポイント • Amazon Cognito Userpools 26 エンドポイント 認可エンドポイント https://[ドメインプレフィックス].auth.[リージョ ン].amazoncognito.com/oauth2/authorize
トークンエンドポイント https://[ドメインプレフィックス].auth.[リージョ ン].amazoncognito.com/oauth2/token 公開鍵取得エンドポイント https://cognito-idp.[リージョン].amazonaws.com/[ドメインプレ フィックス]/.well-known/jwks.json
プロバイダ別のエンドポイント • Google 27 認可エンドポイント https://accounts.google.com/o/oauth2/v2/auth トークンエンドポイント https://oauth2.googleapis.com/token 公開鍵取得エンドポイント https://www.googleapis.com/oauth2/v3/certs
プロバイダ別のエンドポイント • Microsoft Entra ID (common) 28 エンドポイント 認可エンドポイント https://login.microsoftonline.com/common/oauth2/v2.0/authorize
トークンエンドポイント https://login.microsoftonline.com/common/oauth2/v2.0/token 公開鍵取得エンドポイント https://login.microsoftonline.com/common/discovery/v2.0/keys
シークレット情報の管理 • CLIENT_SECRET System Managerのパラメータストアに暗号化して保存 29
署名検証に使用するキー情報 公開鍵取得エンドポイントから取得可能 30 キー 説明 kid 鍵の識別子 alg 署名アルゴリズム(RSA SHA-256
の場合は RS256) use デジタル署名の検証の場合は “sig” n RSA公開鍵を構成する数学的なパラメータ(モジュラス) e RSA公開鍵を構成する数学的なパラメータ(指数)
公開鍵情報のサンプル { "keys":[ { "alg":"RS256", "e":"AQAB", "kid":"+XmXtOKuo9H+8XTZve0e8EbYN+MuYRGAxR6xXbErZxM=", "kty":"RSA", "n":"0B-ZnFsxeQQ2z2rTuncoYANTP…", "use":"sig"
} ] } 31
公開鍵の復元 RS256の場合の公開鍵を復元するサンプルコード public RSAPublicKey publicKey(String n, String e) throws NoSuchAlgorithmException,
InvalidKeySpecException { BigInteger modulus = new BigInteger(1, Base64.getUrlDecoder().decode(n)); BigInteger publicExponent = new BigInteger(1, Base64.getUrlDecoder().decode(e)); RSAPublicKeySpec spec = new RSAPublicKeySpec(modulus, publicExponent); return (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(spec); } 32
フロー概要 1. 認可エンドポイントを response_type=code で遷移 2. 認証プロセスが完了すると、code パラメータと共に redirect_uri に指定したURLにリダイレクト
3. codeパラメータの値を使用して、トークンエンドポイントを 呼び出し、トークン(id_token、アクセストークン、リフ レッシュトークン)を取得 4. id_token の検証は、復元した公開鍵が使用可能 33
サードパーティ開始ログイン 34
LMS • Learning Management System eラーニング(オンライン学習)の配信や、受講者の学習進 捗・成績などを一元管理するための「学習管理システム」 35
e-Learningに関連する標準規格 • SCORM 米国の国防総省に属するAdvanced Distributed Learning Initiative(ADL Initiative)が制定したeラーニングのプラット フォームとコンテンツの標準規格 •
LTI 国際的な非営利の標準化団体 1EdTech Consortium が策定した 標準 • xAPI あらゆる学習や経験のデータを記録・収集するための次世代e ラーニング技術標準規格 36
LTI • LMS(学習管理システム)と外部の学習アプリケーションやデ ジタル教材を安全に連携させるための標準規格 • シングルサインオン(SSO)で外部教材へのログイン • LMS側に成績データの書き戻し • LTI
1.3 で、認証やセキュリティの基盤として OAuth 2.0 や OpenID Connect の全面的採用 37
LTI 1.3 38
LTI 1.3のSSO • LMS間やLMSと任意のWebアプ リケーションを連携 • OIDCのInitiating Login from a
Third Partyを活用 39
LTI 1.3の例 • JupyterHub • LTI Authenticator for JupyterHub 40
フローの概要 1. LMSからアプリケーションにログイン開始の呼び出し(LTI ローンチ) 2. アプリケーションは、response_type=id_token 等を指定し てLMSの認可エンドポイントにリダイレクト応答 3. 指定したアプリケーションのredirect_uriに、LMSから
id_tokenの値を含むフォームデータがPOST 4. アプリケーションを起動(id_token の検証は、復元した公開 鍵が使用可能) 41
LMSに成績等を反映するフロー 1. アプリケーションはJWTを生成して、LMSにリクエスト 2. LMSはアクセストークンを返す 3. アクセストークンを使用して、成績等を反映する 42
主体的アイデンティティ管理 43
主体的アイデンティティ管理による連携 • セッション • OAuth 2.0 44
主体的アイデンティティ管理の必要性 • id_token の有効期間は短い。Moodleの場合有効時間はわずか1 分 • 他社の認可サーバで発行される id_token のフォーマットがい つどのように変更されるか予測できない。さらに凍結や削除さ
れる可能性 • 自社の組織あるいはアプリケーションでユーザの属性を保持す る仕組みを構築する 45
主体的アイデンティティとの紐付け • id_token は、iss と sub でユニークに識別可能。自組織のアイ デンティティと、両者を紐付ける • 自組織のアイデンティティに必要な属性を付加
• アプリケーションは、オパークトークンを活用する • 独自のオパークトークンから属性を取得する方法とJWTにカス タム属性として付加する方法がある • 実装方法は扱うサービス間の結合度あるいは制御可能性による 46
ふたたびABAC • 例えば本番環境に数百台の仮想サーバ (EC2インスタンス) が あったとする • 自チームが管理しているインスタンスにログインしないといけ ない場合、アイデンティにTeam=Aのような属性を持たせて、 仮想サーバにもTeam=Aのように属性
(EC2インスタンスには タグがつけられる) を持たせれば、チーム名が一致するインス タンスにのみセッションマネージャでアクセス可能にできる。 47
参考文献 • 崎村夏彦著 (2021) デジタルアイデンティティー. 日経BP • 土岐孝平著 (2026) OpenID
Connect入門. 技術評論社 • Phillip J. Windley (2024) デジタルアイデンティティのすべて. オライリー・ジャパン • Rob Koper, Colin Tattersall (2005) Learning design : a handbook on modelling and delivering networked education and training. Springer • Vlad Khononov (2025) ソフトウェア設計の結合バランス. イン プレス 48
50 ありがとうございました