Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
OpenID Connectによるサービス間連携
Search
Shigeki Shoji
June 25, 2026
Technology
130
1
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
240
アーティファクト管理でサプライチェーン攻撃を回避!!
takesection
0
140
2025-12-19-LT
takesection
0
170
2025-12-11 nakanoshima.dev LT
takesection
0
190
アジャイルテストで高品質のスプリントレビューを
takesection
0
250
Introduction to kanjava
takesection
0
160
LT Slide 2025-04-22
takesection
0
250
Instructional Designer
takesection
0
230
Zero to Hero
takesection
0
290
Other Decks in Technology
See All in Technology
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/6 - 2026/8
oracle4engineer
PRO
0
190
AI時代、データエンジニアが一番おもろい
genshun9
0
290
アリアドネの糸と、20年ごとの建て替え ── 長尾真『電子図書館』を、伊勢で読み直す / Rereading Makoto Nagao’s "Electronic Library" in Ise
ykiyota
0
160
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
クロスボーダーM&AのValue Upを支えるプロダクト開発。日米チームのハブになったプロダクトエンジニアの実践 / Product Engineering Conference 2026
genda
0
120
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
130
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
360
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
700
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
810
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
17
9.1k
2026_devsumi_ozono.pdf
o3
3
440
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
140
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Google's AI Overviews - The New Search
badams
0
1.6k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
Chasing Engaging Ingredients in Design
codingconduct
0
310
Paper Plane (Part 1)
katiecoart
PRO
1
11k
A Soul's Torment
seathinner
7
3.6k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Deep Space Network (abreviated)
tonyrice
0
300
How to Talk to Developers About Accessibility
jct
2
540
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
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 ありがとうございました