SlideShare a Scribd company logo
1 of 42
Download to read offline
JWTを使った簡易SSOで
徐々にシステムを
リニューアルしている話
GMO Pepabo
@tsuchikazu(nessy)
2015/11/12 pepabo tech conference ec #4
JWT知っている人?
自己紹介
土屋 和良@tsuchikazu(nessy)
カラーミーショップ
http://tsuchikazu.net
AngularJS/PHP/Rails
http://www.slideshare.net/TsuchiKazu/angular-js-47156399
新しい
ショッピングカートと
既存システムとの
JWTによる

ログイン情報の受け渡
しを紹介します
新しいショッピングカート
PHP
PHP Angular +
Rails API
ショップ
ショップ
カート
カート
ログイン情報を共有したい
Client
①ログイン
②ようこそ、○さん
④ログイン状態
PHP
ショップ
Angular +
Rails API
カート
ログイン情報を共有
③カートへ
Client
PHP
ショップ
Angular +
Rails API
カート
ログイン情報を共有
③カートへ
cart.com?user_id=10
Client
PHP
ショップ
Angular +
Rails API
カート
ログイン情報を共有
③カートへ
cart.com?user_id=99
✕
改ざん
Client
PHP
ショップ
Angular +
Rails API
カート
ログイン情報を共有
③カートへ
cart.com?token=xxx
xxx:
user_id=10
Client
PHP
ショップ
Angular +
Rails API
カート
ログイン情報を共有
③カートへ
cart.com?token=xxx
xxx:
user_id=10
密結合
Client
PHP
ショップ
Angular +
Rails API
カート
ログイン情報を共有
?
少し抽象度をあげる
Microservices化??
PHP
PHP
ショップ
ショップ
カート
Angular +
Rails API
カート
???
新機能
???
おすすめ
おすすめ
ログイン情報だけじゃないかも
PHP
ショップ
ショップ
カート
Angular +
Rails API
カート
???
新機能
???
おすすめ
おすすめ
サービスから別のサービスへ
何か情報を改ざんされずに
secureに渡したい
そこでJWT
JSON Web Token
JWTが生まれた背景
A B
単純な2者間のやりとり
SSL/TLS IPSec
A B
X
改ざん/盗聴
仲介者がいる2者間のやりとり
Aさん Bさん
MTA
e.g. Mail
改ざん/盗聴
Aさん Bさん
MTA
e.g. Mail
改ざん/盗聴
署名/暗号化
by S/MIME
A service B service
Client
e.g. XML
改ざん/盗聴
署名/暗号化
by XML Signature/
Encryption
A service B service
Client
e.g. JSON
署名/暗号化
by JWT
(JWS/JWE)
改ざん/盗聴
JWTは
JSONに署名をつけたり、
暗号化するためのもの
2010∼仕様策定スタート
2015/05にRFC化
読み方は jot
Format
eyJ0eXAiOiJKV1QiLA0KICJhb
GciOiJIUzI1NiJ9
.
eyJpc3MiOiJqb2UiLA0KICJleH
AiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9
pc19yb290Ijp0cnVlfQ
.

dBjftJeZ4CVP-
mB92K27uhbUJU1p1r_wW1gF
WFOEjXk
JWTとJWSのFormat
Header Claims Set

(JSON)
Signature
● ●
base64enc({
iss: “shop-pro.jp”,
sub: “1001”,
exp: 1426420800
})
HMAC_or_RSA(
Header + ‘.’ +
Claims
, secretKey)
base64enc({
typ: “JWT”,
alg: “HMAC_RSA”
})
JWT
JWS
A service B service
Client
改ざんチェック
S S
Key Key
S
Signatureを再作成して一致チェック
H C S
H C H C
H C
JWE(暗号化)
は省略
JWT/JWS/JWEとは
• JWT = JSONをbase64 encoding して、
URL-safeにした文字列
• JWS = 署名付きJWT
• JWTと言ってるけど、JWSのことが多いので注意
• JWE = 暗号化したJWT
• でだいたいOK
どこで使われているか
• OpenID Connect の ID Token
• OAuth 2.0 JWT Bearer Token
Profile
• Twillio API, Mozilla Persona
• 他にもいっぱい
どこで使われているか
in カラーミーショップ
ログイン情報を受け渡す
Client
①ログイン
②ようこそ、○さん
③カートへ
④ログイン状態
PHP
ショップ
Angular +
Rails API
カート
JWT JWT
Key
Key
ログイン情報を受け渡す(カート)
Angular Rails API
APIでログインユーザのデータを扱う

証明書としてそのまま利用
(OAuthのフローに乗せたほうがいいかも)
JWT
Key
ログイン情報を受け渡す(カート
内)
Angular Rails API
同じサーバ間のやりとりでもOK
Key
JWT
JWT
ログイン
まとめ
• JWTを使ってsecureにJSONの受け
渡しができる
• ログインまわり以外にも使える基礎的な
もの
• 事例がまだまだ少ないので、もっとJWT
を使っていきましょう

More Related Content

What's hot

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 

What's hot (20)

SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 

Recently uploaded

Recently uploaded (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

JWTを使った簡易SSOで徐々にシステムをリニューアルしている話