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 Self-Issued IdPを応用したSingle Sign ...
Search
Recruit Technologies
March 29, 2018
Technology
4
4.7k
OpenID Connect Self-Issued IdPを応用したSingle Sign Onの実装
2018/03/23 OpenID TechNight Vol.15での、入来の講演資料になります
Recruit Technologies
March 29, 2018
Tweet
Share
More Decks by Recruit Technologies
See All by Recruit Technologies
障害はチャンスだ! 障害を前向きに捉える
rtechkouhou
1
640
Flutter移行の苦労と、乗り越えた先に得られたもの
rtechkouhou
3
11k
ここ数年間のタウンワークiOSアプリのエンジニアのチャレンジ
rtechkouhou
1
1.5k
大規模環境をAWS Transit Gatewayで設計/移行する前に考える3つのポイントと移行への挑戦
rtechkouhou
1
1.9k
【61期 新人BootCamp】TOC入門
rtechkouhou
3
41k
【RTC新人研修 】 TPS
rtechkouhou
1
41k
Android Boot Camp 2020
rtechkouhou
0
41k
HTML/CSS
rtechkouhou
10
50k
TypeScript Bootcamp 2020
rtechkouhou
9
45k
Other Decks in Technology
See All in Technology
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
1
110
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
OCI 運用監視サービス 概要
oracle4engineer
PRO
0
4.8k
心が動くエンジニアリング ── 私が夢中になる理由
16bitidol
0
100
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
260
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.2k
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
1
450
CDCL による厳密解法を採用した MILP ソルバー
imai448
3
160
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
910
Security-JAWS【第35回】勉強会クラウドにおけるマルウェアやコンテンツ改ざんへの対策
4su_para
0
180
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
230
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.5k
Featured
See All Featured
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Adopting Sorbet at Scale
ufuk
73
9.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
The World Runs on Bad Software
bkeepers
PRO
65
11k
We Have a Design System, Now What?
morganepeng
50
7.2k
Making Projects Easy
brettharned
115
5.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
A Philosophy of Restraint
colly
203
16k
Documentation Writing (for coders)
carmenintech
65
4.4k
Transcript
TechNight #15 – OpenID Connect Self-Issued IdP を応用した Single Sign
On の実装 リクルートテクノロジーズ IDP部 シニアアーキテクト 入來 隼也
(C) Recruit Technologies Co.,Ltd. All rights reserved. 1 自己紹介 入來
隼也(いりき しゅんや) 金融SE->楽天-> リクルートテクノロジーズ ITソリューション統括本部 ID・ポイント部 セキュリティT、アーキT シニアアーキテクト(黒•みたいな制度)
(C) Recruit Technologies Co.,Ltd. All rights reserved. 2 セキュリティT・アーキT •
プロトコル • OAuth2.0 • Open ID Connect • Oath token introspection • JWT-formatted Access Token • Proof Key for Code Exchange(PKCE) etc... • セキュリティ • ログイン履歴 • ログインアラート • 2段階認証(メール・認証アプリ) etc... • そのほか • サイトサポート
(C) Recruit Technologies Co.,Ltd. All rights reserved. 3 はじめに
(C) Recruit Technologies Co.,Ltd. All rights reserved. 4 リクルートのサービス紹介 日常生活や人生に関わる
サービスを展開
(C) Recruit Technologies Co.,Ltd. All rights reserved. 5 リクルートにおけるIDへの取り組み •
グループ会社の40以上のサービスに共通IDを提供 • OpenID Connect及びOAuth2.0対応の認証認可機能を提供 OpenID Connect OAuth2.0
(C) Recruit Technologies Co.,Ltd. All rights reserved. 6 OpenIDファンデーションへの参加 •
OpenID Certificationを近々取得予定
(C) Recruit Technologies Co.,Ltd. All rights reserved. 7 アジェンダ 1.
スマホアプリに求めるもの 2. iOS での実現方法 3. 標準仕様 4. Self-issued IdP 5. リクルート独自の仕組み 6. 実装(処理フロー) 7. Androidでは
(C) Recruit Technologies Co.,Ltd. All rights reserved. 8 スマホアプリに求めるもの
(C) Recruit Technologies Co.,Ltd. All rights reserved. 9 スマホアプリに求めるもの ・ログインしっぱなしにしたい
・複数のアプリでログインを共有したい ・端末のアンロックの仕組みと連動したい (Touch ID, Face ID etc.)
(C) Recruit Technologies Co.,Ltd. All rights reserved. 10 iOS での実現方法
(C) Recruit Technologies Co.,Ltd. All rights reserved. 11 Shared KeyChainを利用する
・他社アプリからアクセスされない ※同一の版元の場合、情報が共有できる (App ID Prefixが同一) ・端末アンロックの連動が可能 必要なこと: ・安全に認証を提供 Bearer Tokenだと通信途中が。。。 秘密鍵を使った認証(毎回通信内容が変わる)
(C) Recruit Technologies Co.,Ltd. All rights reserved. 12 標準仕様
(C) Recruit Technologies Co.,Ltd. All rights reserved. 13 標準仕様 •
Universal Authentication Frameworkの略称 FIDO (W3C Web Authentication) UAF • 携帯端末などをIDPにする規格 OIDC Self-issued IdP 端末上に秘密鍵があることをサーバー側に証明する手段として使える標準仕様
(C) Recruit Technologies Co.,Ltd. All rights reserved. 14 OIDC Self-issued
IdP
(C) Recruit Technologies Co.,Ltd. All rights reserved. 15 OIDC Self-issued
IdP OpenID Connect coreで定義。 Self-Issued OpenID Provider.(端末がIDPになる仕様) http://openid.net/specs/openid-connect-core-1_0.html#SelfIssued [概要] ・Issuer :https://self-issued.me を利用 ・署名付きID Tokenの生成方法 ・公開鍵で署名の検証方法
(C) Recruit Technologies Co.,Ltd. All rights reserved. 16 OIDC Self-issued
IdP ID TOKEN { "iss": "https://self-issued.me", "sub":端末上の鍵ペアの JWK Thumbprint “aud”:リクルートIDサーバーの Callback URL “nonce”:リクルートIDサーバが生成したnonce, “exp”: ID_TOKENの有効期限, “iat”: ID_TOKENの発行時刻, “sub_jwk”: { “kty”:“RSA”, “n”: “・・・・・・" } } (端末上の鍵ペアの公開鍵 JWK) この値が毎回違う
(C) Recruit Technologies Co.,Ltd. All rights reserved. 17 OIDC Self-issued
IdP OIDC Self-issued を利用した実装ポイント ・[端末]で鍵ペア(private,public)をつくる ・[サーバ](ID/PASSと引き換え)public鍵(thumbprint)を登録 ・[サーバ]2回目以降の認証は署名付きID_TOKENの検証実施 Private key public key thumbprint ・user + thumbprint ID_TOKEN ・ID_TOKEN検証
(C) Recruit Technologies Co.,Ltd. All rights reserved. 18 OIDC Self-issued
IdP なぜ安全なの?? ・秘密鍵が端末から出ない ・毎回異なるID_TOKENで認証される(nonce) ・そのID_TOKENに署名付けれるのは秘密鍵だけ
(C) Recruit Technologies Co.,Ltd. All rights reserved. 19 リクルート独自の取り組み
(C) Recruit Technologies Co.,Ltd. All rights reserved. 20 リクルート独自の取り組み •
各アプリがShared KeyChain を利用 • キラーアプリがあれば、そのアプリをself-issued OPにできる • リクルートのキラーアプリは。。。。 • リクルートIDを利用するアプリ向けにSDKを提供 • Shared KeyChainのやりとりを隠蔽 • 特徴:WebViewでログイン画面提供 • Redirect Hook利用(コンテキストスイッチ防止) • オプションで Self-issued IdP が利用可能 • PKCE(Proof key for Code) • セキュリティ
(C) Recruit Technologies Co.,Ltd. All rights reserved. 21 実装(処理フロー) •
OpenID Connectのフローと SDKを入れた時のログインフロー • 初回時のログイン(鍵登録)フロー • 2回目以降のログイン(SSO)フロー • 端末認証を使用したログインフロー • 追加で実施しているセキュリティ(PKCE)フロー
(C) Recruit Technologies Co.,Ltd. All rights reserved. 22 OpenID Conectのフロー
Application Authorization Server Authorization Code Authorization Request
(C) Recruit Technologies Co.,Ltd. All rights reserved. 23 SDKを入れた時のフロー SDK:
Redirect Hookを利用してパラメー タなど付与。 共通SDK Authorization Request Application Authorization Server Authorization Request Self-issued OP SDK利用 = フローを変えずSSO・指紋認証が可能 Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 24 実装(処理フロー) •
OpenID Connectのフローと SDKを入れた時のログインフロー • 初回時のログイン(鍵登録)フロー • 2回目以降のログイン(SSO)フロー • 端末認証を利用したログインフロー • 追加で実施しているセキュリティ(PKCE)フロー
(C) Recruit Technologies Co.,Ltd. All rights reserved. 25 初回時のログイン(鍵登録)フロー 1.
鍵ペアを作成(Keychain) 公開鍵のthumbprintを Authorization Requestに付与 共通SDK Authorization Request Application Authorization Server Authorization Request Self-issued OP thumbprint Authorization Code Private key Public Key
(C) Recruit Technologies Co.,Ltd. All rights reserved. 26 初回時のログイン(鍵登録)フロー 2.
nonceを送信 Authorization Serverはnonce をSelf-issued OPに送信 共通SDK Authorization Request Application Authorization Server Authorization Request Self-issued OP nonce Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 27 初回時のログイン(鍵登録)フロー 3.
署名付きID_TOKEN作成 受け取ったnonceを含めて署名付 きID_TOKENを作成 共通SDK Authorization Request Application Authorization Server Authorization Request Self-issued OP Id_token Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 28 初回時のログイン(鍵登録)フロー 4.
署名検証 Authorization Serverが受け 取ったthumbprint、公開鍵、署 名を検証送ったnonceか検証 共通SDK Authorization Request Application Authorization Server Authorization Request Self-issued OP Id_token ※登録はtoken endpointのタイミング ID/PASSで認証 Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 29 実装(処理フロー) •
OpenID Connectのフローと SDKを入れた時のログインフロー • 初回時のログイン(鍵登録)フロー • 2回目以降のログイン(SSO)フロー • 端末認証を利用したログインフロー • 追加で実施しているセキュリティ(PKCE)フロー
(C) Recruit Technologies Co.,Ltd. All rights reserved. 30 2回目以降のログイン(SSO)フロー 1.
authZリクエストを送信 公開鍵のthumbprint、 login_hintをAuthorization Requestに付与 (登録済みのアカウントを確認) 共通SDK Authorization Request Application Authorization Server Authorization Request Self-issued OP thumbprint login_hint Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 31 2回目以降のログイン(SSO)フロー 共通SDK
Authorization Request Application Authorization Server Authorization Request Self-issued OP nonce 2. nonceを送信 Authorization Serverはnonce をSelf-issued OPに送信 Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 32 2回目以降のログイン(SSO)フロー 共通SDK
Authorization Request Application Authorization Server Authorization Request Self-issued OP 3. 署名付きID_TOKEN作成 受け取ったnonceを含めて署名付 きID_TOKENを作成 Id_token Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 33 2回目以降のログイン(SSO)フロー 共通SDK
Authorization Request Application Authorization Server Authorization Request Self-issued OP 4. 署名検証 Authorization Serverが登録済 みのthumbprint、公開鍵、署名 を検証送ったnonceか検証 Id_token Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 34 実装(処理フロー) •
OpenID Connectのフローと SDKを入れた時のログインフロー • 初回時のログイン(鍵登録)フロー • 2回目以降のログイン(SSO)フロー • 端末認証を利用したログインフロー • 追加で実施しているセキュリティ(PKCE)フロー
(C) Recruit Technologies Co.,Ltd. All rights reserved. 35 端末認証を利用したログインフロー acr=urn:recruit:acr:stdauth
acr:認証コンテキストクラス (Authentication Context Class Reference) 共通SDK Authorization Request Application Authorization Server Authorization Request Self-issued OP 1. authZリクエストを送信 公開鍵のthumbprint、 login_hint, acr をAuthorization Requestに付与 thumbprint login_hint acr Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 36 端末認証を利用したログインフロー amr
共通SDK Authorization Request Application Authorization Server Authorization Request Self-issued OP nonce 2. nonceを送信 Authorization Serverは nonce,amrをSelf-issued OPに 送信 amr=touchId, fido,FaceID amr:認証方式 (Authentication Methods References) Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 37 端末認証を利用したログインフロー 共通SDK
Authorization Request Application Authorization Server Authorization Request Self-issued OP amr 3. 署名付きID_TOKEN作成 受け取ったnonce,amr(実際に 行った認証方式)を含めて署名付 きID_TOKENを作成 Id_token 端末認証を実施 Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 38 端末認証を利用したログインフロー 共通SDK
Authorization Request Application Authorization Server Authorization Request Self-issued OP 4. 署名検証 Authorization Serverが登録済 みのthumbprint、公開鍵、署名 を検証送ったnonceか検証 amr を確認(Self-issued OP側で 行った認証方式を確認。必要に 応じてID/PASSによる認証実施) Id_token Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 39 実装(処理フロー) •
OpenID Connectのフローと SDKを入れた時のログインフロー • 初回時のログイン(鍵登録)フロー • 2回目以降のログイン(SSO)フロー • 端末認証を使用したログインフロー • 追加で実施しているセキュリティ(PKCE)フロー
(C) Recruit Technologies Co.,Ltd. All rights reserved. 40 PKCE:認可コード横取り攻撃への対抗策 Application
Authorization Server Authorization Code Authorization Request 横取り ▪PKCE 発行された認可コードをクライアン トアプリケーションが受け取るとき、 悪意あるアプリケーションがその認 可コードを横取りするという攻撃へ の対策 (authorization code interception attack) RFC 7636 (Proof Key for Code Exchange by OAuth Public Clients) OAuth RS(バックエンドサーバ) Authorization Code Authorization Code
(C) Recruit Technologies Co.,Ltd. All rights reserved. 41 PKCE:認可コード横取り攻撃への対抗策 Application
Authorization Server Authorization Code Authorization Request 横取り OAuth RS(バックエンドサーバ) Authorization Code Authorization Code ▪authZリクエスト code_challenge、 をAuthorization Requestに付与 (リクルートIDは暗号化しているため、 code_challengeは暗号値、 code_challenge_method=S256を追加) code_challenge=aZw1Qb…
(C) Recruit Technologies Co.,Ltd. All rights reserved. 42 PKCE:認可コード横取り攻撃への対抗策 Application
Authorization Server Authorization Code Authorization Request 横取り OAuth RS(バックエンドサーバ) Authorization Code Authorization Code ▪Token endpint リクエスト code_verifier をtoken endpointへ送信 Token endpointでは、code_challenge ,code_verifier を検証. リクルートIDの場合: code_challenge=S256(code_verifier) code_verifier=qw31 code_verifier=qw31 code_challenge=aZw1Qb…
(C) Recruit Technologies Co.,Ltd. All rights reserved. 43 Androidに対するSSOの取り組み
(C) Recruit Technologies Co.,Ltd. All rights reserved. 44 iOS の
Shared KeyChain 相当のものがない… 初回にインストールされたアプリを当該端末上で IdP 化 その他のアプリは当該 IdP アプリを AccountManager 経由で 呼び出す Androidに対するSSOの取り組み