O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
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
...
JWTとJWSのFormat
Header Claims Set

(JSON)
Signature
● ●
base64enc({
iss: “shop-pro.jp”,
sub: “1001”,
exp: 1426420800
})
HMA...
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
...
どこで使われているか
• 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
を使っていきましょう
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
Próximos SlideShares
Carregando em…5
×

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

30.407 visualizações

Publicada em

JWTのわかりやすい説明 by
国内No.1 ECサービス開発のすべてを語り尽くします!〜第4回ペパボテックカンファレンスEC編 - dots. [ドッツ] - http://eventdots.jp/event/573086

Publicada em: Tecnologia
  • Seja o primeiro a comentar

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

  1. 1. JWTを使った簡易SSOで 徐々にシステムを リニューアルしている話 GMO Pepabo @tsuchikazu(nessy) 2015/11/12 pepabo tech conference ec #4
  2. 2. JWT知っている人?
  3. 3. 自己紹介 土屋 和良@tsuchikazu(nessy) カラーミーショップ http://tsuchikazu.net AngularJS/PHP/Rails
  4. 4. http://www.slideshare.net/TsuchiKazu/angular-js-47156399
  5. 5. 新しい ショッピングカートと 既存システムとの JWTによる
 ログイン情報の受け渡 しを紹介します
  6. 6. 新しいショッピングカート PHP PHP Angular + Rails API ショップ ショップ カート カート
  7. 7. ログイン情報を共有したい
  8. 8. Client ①ログイン ②ようこそ、○さん ④ログイン状態 PHP ショップ Angular + Rails API カート ログイン情報を共有 ③カートへ
  9. 9. Client PHP ショップ Angular + Rails API カート ログイン情報を共有 ③カートへ cart.com?user_id=10
  10. 10. Client PHP ショップ Angular + Rails API カート ログイン情報を共有 ③カートへ cart.com?user_id=99 ✕ 改ざん
  11. 11. Client PHP ショップ Angular + Rails API カート ログイン情報を共有 ③カートへ cart.com?token=xxx xxx: user_id=10
  12. 12. Client PHP ショップ Angular + Rails API カート ログイン情報を共有 ③カートへ cart.com?token=xxx xxx: user_id=10 密結合
  13. 13. Client PHP ショップ Angular + Rails API カート ログイン情報を共有 ?
  14. 14. 少し抽象度をあげる
  15. 15. Microservices化?? PHP PHP ショップ ショップ カート Angular + Rails API カート ??? 新機能 ??? おすすめ おすすめ
  16. 16. ログイン情報だけじゃないかも PHP ショップ ショップ カート Angular + Rails API カート ??? 新機能 ??? おすすめ おすすめ
  17. 17. サービスから別のサービスへ 何か情報を改ざんされずに secureに渡したい
  18. 18. そこでJWT JSON Web Token
  19. 19. JWTが生まれた背景
  20. 20. A B 単純な2者間のやりとり SSL/TLS IPSec
  21. 21. A B X 改ざん/盗聴 仲介者がいる2者間のやりとり
  22. 22. Aさん Bさん MTA e.g. Mail 改ざん/盗聴
  23. 23. Aさん Bさん MTA e.g. Mail 改ざん/盗聴 署名/暗号化 by S/MIME
  24. 24. A service B service Client e.g. XML 改ざん/盗聴 署名/暗号化 by XML Signature/ Encryption
  25. 25. A service B service Client e.g. JSON 署名/暗号化 by JWT (JWS/JWE) 改ざん/盗聴
  26. 26. JWTは JSONに署名をつけたり、 暗号化するためのもの
  27. 27. 2010∼仕様策定スタート 2015/05にRFC化 読み方は jot
  28. 28. Format
  29. 29. eyJ0eXAiOiJKV1QiLA0KICJhb GciOiJIUzI1NiJ9 . eyJpc3MiOiJqb2UiLA0KICJleH AiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9 pc19yb290Ijp0cnVlfQ .
 dBjftJeZ4CVP- mB92K27uhbUJU1p1r_wW1gF WFOEjXk
  30. 30. 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
  31. 31. A service B service Client 改ざんチェック S S Key Key S Signatureを再作成して一致チェック H C S H C H C H C
  32. 32. JWE(暗号化) は省略
  33. 33. JWT/JWS/JWEとは • JWT = JSONをbase64 encoding して、 URL-safeにした文字列 • JWS = 署名付きJWT • JWTと言ってるけど、JWSのことが多いので注意 • JWE = 暗号化したJWT • でだいたいOK
  34. 34. どこで使われているか • OpenID Connect の ID Token • OAuth 2.0 JWT Bearer Token Profile • Twillio API, Mozilla Persona • 他にもいっぱい
  35. 35. どこで使われているか in カラーミーショップ
  36. 36. ログイン情報を受け渡す Client ①ログイン ②ようこそ、○さん ③カートへ ④ログイン状態 PHP ショップ Angular + Rails API カート JWT JWT Key Key
  37. 37. ログイン情報を受け渡す(カート) Angular Rails API APIでログインユーザのデータを扱う
 証明書としてそのまま利用 (OAuthのフローに乗せたほうがいいかも) JWT Key
  38. 38. ログイン情報を受け渡す(カート 内) Angular Rails API 同じサーバ間のやりとりでもOK Key JWT JWT ログイン
  39. 39. まとめ • JWTを使ってsecureにJSONの受け 渡しができる • ログインまわり以外にも使える基礎的な もの • 事例がまだまだ少ないので、もっとJWT を使っていきましょう

×