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
May 29, 2026
Technology
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OpenID Connectによるサービス間連携
JJUG CCC 2026 Spring
Shigeki Shoji
May 29, 2026
More Decks by Shigeki Shoji
See All by Shigeki Shoji
OpenID Connectによるサービス間連携
takesection
0
99
アーティファクト管理でサプライチェーン攻撃を回避!!
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
200
Zero to Hero
takesection
0
280
Other Decks in Technology
See All in Technology
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
7.9k
プライバシー保護の理論と実践
lycorptech_jp
PRO
1
220
スタートアップにおけるアジャイルの実践について #shibuyagile
murabayashi
3
1.9k
AIで政治は変わるのか? — 中高生と考えたAI時代の民主主義(東海高校サタデープログラム)
eitarosuda
0
360
テスト設計の本質を改めて考えてみる~生成AIを活用する時代だからこそ、作ったテストの説明性を高めよう~
yamasaki696
1
270
AWS Summit の片隅で、体育座りしながらコミュニティがにぎわう理由を考えた
k_adachi_01
2
330
Terraform 101 (初心者向け) 資料
shuadachi
0
160
AWS Summit 2026で見えたSIerにとっての Amazon Quickの位置づけ
maf_0521
0
150
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
『AIに負けない』より『AIと遊ぶ』」〜ワクワクが最強のテスト・QA学習戦略_公開用
odan611
1
340
知見・人・API・DB・予算 ─ ナイナイ尽くしだった人事データ整備 with dbt、5年間の学び
ken6377
1
130
勉強会企画をアプリで構造化してみた 〜そこで見えた、AIとの付き合い方〜 / I've structured a study group plan using an app.
pauli
0
280
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
450
Automating Front-end Workflow
addyosmani
1370
210k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
180
The Cost Of JavaScript in 2023
addyosmani
55
10k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Transcript
OpenID Connectによる サービス間連携 JJUG CCC 2026 Spring / #jjug_ccc_c 2026年05月30日
Shigeki Shoji
庄司重樹 熊本大学大学院 教授システム学専攻 博士前期課程 ICTインストラクター / アジャイルコーチ e-Learning Professional SCORM技術者
好きな言語:Scala、Java
話さないこと • OpenID Connect以外のフェデレーション、SAML等 • OpenID Connectのフローは、認可コードフローとサードパー ティ開始ログインフロー以外 • SPAやモバイルアプリを対象とした実装
• ベストプラクティス、あるいは絶対的な解決策ではない 3
認可と認証 • 『リソースに対してアクセス許可を与えることを、「アクセス 認可」と呼ぶ』(崎村 2021) • OAuth 2.0は、プリンシパル(リソース所有者)がアプリケーションに 対して、自身の保持するコンテンツへの制限付きアクセスを安全に許 可するためのフレームワーク。
• 認証はデジタル世界にアクセスしようとするユーザが本人であ ることを証明・検証するプロセス。 4
構成 5
認可 6
最小権限の原則 "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 7
IBAC (Identifier Based Access Control) • 識別子ごとにアクセス制御 例えば、ユーザ名でアクセス制御 識別子ごとに制御を行うため、識別子の数が多くなると保守が 煩雑
8
RBAC (Role Based Access Control) • ユーザの属性にロールを導入し、ロールによってアクセス制御 例えば、管理者ロールはすべてのリソースへのアクセスを許可 し、監査ロールは特定のリソースの読み取りアクセスを許可 ユーザの動的な性質に基づく制御が困難
9
ABAC (Attribute Based Access Control) • ポリシーの爆発的増加を防ぎ、スケール可能に 属性値を評価してアクセス許可 10
RBACとABACの比較 • プロダクト管理者はプロダクトに関連するすべてのリソースへ のアクセスが許可される。プロダクトはA〜Cの3個ある。 11 RBAC ABAC ProductA_Administrator Product_Administrator "Condition":
{ “StringEquals”: { "aws:ResourceTag/Product": "${aws:PrincipalTag/Product}” } } ProductB_Administrator ProductC_Administrator
AWSマネジメントコンソールの例 IAMポリシー 12
ロールにAdministratorを含む場合 13
ロールにAdministratorを含まない場合 14
ABACの実装に使用できるOSS • Open Policy Agent Rego言語を使用してポリシーを記述 15
OpenID Connect (OIDC) • OIDCは認証 認可リクエスト:アプリケーション (Client) が許可してほしい アクセスの内容 (openid、email、profile
等) を scope に指定 して取得 • openid が scope にある場合、id_token (JWT) を受け取ること ができる • id_tokenはあくまでも身元を証明するための「身分証明書」。 アクセス制御のための「通行許可証」として設計されていない 16
認証 17
デジタルアイデンティティ • 現実世界は、関係性を深めるまでは匿名のまま対応が可能。デ ジタル世界は、関係性の有無に関わらずプリンシパルの同一性 を保証する必要があり、認証が必要になっている。 18
フェデレーション型 • アドホック・フェデレーション • ハブ&スポーク・フェデレーション • アイデンティティ連携ネットワーク 19
OIDCを使ったクラウドアクセス • AWS • IAMのIDプロバイダとIAMロールとでAWSリソースに対するアクセス 許可が可能 • IAMロールの認証情報からAWSマネジメントコンソールへのアクセスも可能なた め、自由度が高い •
Azure • Microsoft Entra IDに依存している • サードバーティのIDを登録して、Azure Portalにアクセスする仕組みがある 20
CI/CDで使用するOIDC • CI/CDパイプライン上のトークン • GitHub Actions • GitHub APIでid_tokenの取得が可能 •
GitLab CI/CD • 指定したAudience値でid_tokenを生成し環境変数に設定する • id_tokenを使用してリソースにアクセス • AWSやAzureの場合、IAMロールやEntra IDを通じてアクセス 21
トークン • オパークトークン • セッションID • 自己完結型トークン • JWT 22
id_token (JWT) • ヘッダ、ペイロード、署名で構成 • 各パートは、. (ドット) で区切られる • ヘッダ、ペイロードは、JSONをBase64エンコードした文字列
• 署名は、ヘッダで指定されたアルゴリズム (alg) で署名し、そ れをBase64エンコードした文字列 23
サンプル ヘッダ: { "kid": "+XmXtOKuo9H+8XTZve0e8EbYN+MuYRGAxR6xXbErZxM=", "alg": "RS256" } 24
サンプル ペイロード(一部省略): { "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]
} 25
認可コードフロー 26
プロバイダ別のエンドポイント • Amazon Cognito Userpools 27 エンドポイント 認可エンドポイント https://[ドメインプレフィックス].auth.[リージョ ン].amazoncognito.com/oauth2/authorize
トークンエンドポイント https://[ドメインプレフィックス].auth.[リージョ ン].amazoncognito.com/oauth2/token 公開鍵取得エンドポイント https://cognito-idp.[リージョン].amazonaws.com/[ドメインプレ フィックス]/.well-known/jwks.json
プロバイダ別のエンドポイント • Google 28 認可エンドポイント https://accounts.google.com/o/oauth2/v2/auth トークンエンドポイント https://oauth2.googleapis.com/token 公開鍵取得エンドポイント https://www.googleapis.com/oauth2/v3/certs
プロバイダ別のエンドポイント • Microsoft Entra ID (common) 29 エンドポイント 認可エンドポイント 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のパラメータストアに暗号化して保存 30
署名検証に使用するキー情報 公開鍵取得エンドポイントから取得可能 31 キー 説明 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"
} ] } 32
公開鍵の復元 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); } 33
フロー概要 1. 認可エンドポイントを response_type=code で遷移 2. 認証プロセスが完了すると、code パラメータと共に redirect_uri に指定したURLにリダイレクト
3. codeパラメータの値を使用して、トークンエンドポイントを 呼び出し、トークン(id_token、アクセストークン、リフ レッシュトークン)を取得 4. id_token の検証は、復元した公開鍵が使用可能 34
サードパーティ開始ログイン 35
LMS • Learning Management System eラーニング(オンライン学習)の配信や、受講者の学習進 捗・成績などを一元管理するための「学習管理システム」 36
e-Learningに関連する標準規格 • SCORM 米国の国防総省に属するAdvanced Distributed Learning Initiative(ADL Initiative)が制定したeラーニングのプラット フォームとコンテンツの標準規格 •
LTI 国際的な非営利の標準化団体 1EdTech Consortium が策定した 標準 • xAPI あらゆる学習や経験のデータを記録・収集するための次世代e ラーニング技術標準規格 37
LTI • LMS(学習管理システム)と外部の学習アプリケーションやデ ジタル教材を安全に連携させるための標準規格 • シングルサインオン(SSO)で外部教材へのログイン • LMS側に成績データの書き戻し • LTI
1.3 で、認証やセキュリティの基盤として OAuth 2.0 や OpenID Connect の全面的採用 38
LTI 1.3 39
LTI 1.3のSSO • LMS間やLMSと任意のWebアプ リケーションを連携 • OIDCのInitiating Login from a
Third Partyを活用 40
LTI 1.3の例 • JupyterHub • LTI Authenticator for JupyterHub 41
フローの概要 1. LMSからアプリケーションにログイン開始の呼び出し(LTI ローンチ) 2. アプリケーションは、response_type=id_token 等を指定し てLMSの認可エンドポイントにリダイレクト応答 3. 指定したアプリケーションのredirect_uriに、LMSから
id_tokenの値を含むフォームデータがPOST 4. アプリケーションを起動(id_token の検証は、復元した公開 鍵が使用可能) 42
LMSに成績等を反映するフロー 1. アプリケーションはJWTを生成して、LMSにリクエスト 2. LMSはアクセストークンを返す 3. アクセストークンを使用して、成績等を反映する 43
主体的アイデンティティ管理 44
主体的アイデンティティ管理による連携 • セッション • OAuth 2.0 45
主体的アイデンティティ管理の必要性 • id_token の有効期間は短い。Moodleの場合有効時間はわずか1 分 • 他社の認可サーバで発行される id_token のフォーマットがい つどのように変更されるか予測できない。さらに凍結や削除さ
れる可能性 • 自社の組織あるいはアプリケーションでユーザの属性を保持す る仕組みを構築する 46
主体的アイデンティティとの紐付け • id_token は、iss と sub でユニークに識別可能。自組織のアイ デンティティと、両者を紐付ける • 自組織のアイデンティティに必要な属性を付加
• アプリケーションは、セッションID等オパークトークンを活用 する 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 ありがとうございました