SlideShare a Scribd company logo

OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015

Toru Yamaguchi
Toru Yamaguchi
Toru YamaguchiArchitect at DeNA

OAuth 2.0 の新しい response mode の紹介です。

OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015

1 of 35
Download to read offline
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
OAuth 2.0
Web Messaging
Response Mode
OpenID Summit 2015
November	
  10,	
  2015	
  
Toru	
  Yamaguchi	
  
Senior	
  Architect	
  	
  
Sub	
  Business	
  Unit	
  Head	
  
Open	
  Pla=orm	
  Business	
  Unit	
  
DeNA	
  Co.,	
  Ltd.	
  	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
講演者紹介	
  
!  ⽒氏名	
  
⁃  ⼭山⼝口	
  徹	
  (やまぐち	
  とおる)	
  
!  HN	
  
⁃  @zigorou	
  
!  会社	
  
⁃  株式会社ディー・エヌ・エー	
  
!  部署	
  
⁃  オープンプラットフォーム事業本部	
  
!  役職	
  
⁃  副事業本部⻑⾧長	
  シニアアーキテクト	
  
!  仕事	
  
⁃  Mobage	
  やその他協業案件などにおける
システム設計がメイン	
  
2	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
本⽇日の概要	
  
!  OAuth	
  2.0	
  の	
  Authorization	
  Endpoint	
  からのレスポンスの受信形式
として新しいドラフトである	
  OAuth	
  2.0	
  Web	
  Messaging	
  Response	
  
Mode	
  を作ったので、それの詳細について以下の流流れで解説します	
  
!  OAuth	
  2.0	
  の	
  Redirect	
  URI	
  について	
  
!  OAuth	
  2.0	
  Form	
  Post	
  Response	
  Mode	
  
!  OAuth	
  2.0	
  Web	
  Messaging	
  Response	
  Mode	
  
3	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
OAuth	
  2.0	
  と	
  Redirect	
  URI	
  
OAuth	
  2.0	
  Web	
  Messaging	
  Response	
  Mode	
  
4	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
OAuth	
  2.0	
  とは本質的に何をやりたい枠組みなのか	
  
!  もの凄く簡略略化して⾔言えば、Client	
  が	
  (End	
  User	
  の権限を持つ)	
  Access	
  
Token	
  を	
  Authorization	
  Server	
  から得るためのフレームワークが	
  
OAuth	
  2.0	
  だと⾔言えます	
  
⁃  その結果得た	
  Access	
  Token	
  を⽤用いて	
  Protected	
  Resource	
  (要は	
  
API)	
  にアクセスする	
  
5	
  
End	
  User	
  
AuthorizaDon	
  Server	
  
Client	
  
1.	
  Redierct	
  to	
  AuthorizaDon	
  Request	
   2.	
  AuthorizaDon	
  Request	
  
3.	
  AuthorizaDon	
  Response	
  4.	
  Redirect	
  to	
  	
  
Redirect	
  URI	
  
5.	
  Token	
  Request	
  
6.	
  Token	
  Response	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
AuthorizaGon	
  Code	
  Grant	
  のシーケンス	
  
!  Authorization	
  Response	
  は	
  Redirect	
  URI	
  に対する	
  UserAgent	
  を介し
た	
  HTTP	
  リダイレクションで渡される	
  
6	
  
hQp://goo.gl/kfZTNY	
  
Ad

Recommended

コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?Takuya Ueda
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア外道 父
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話Takuto Wada
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014Nov Matake
 
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -Naoki Nagazumi
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用Masaru Kurahayashi
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 

More Related Content

What's hot

Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Kazumi IWANAGA
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringYahoo!デベロッパーネットワーク
 
OpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクルOpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクルMasaru Kurahayashi
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)NTT DATA Technology & Innovation
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?ichirin2501
 
シングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のりシングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のりShinichi Tomita
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外Takuya Sato
 
認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜Masaru Kurahayashi
 
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsTatsuo Kudo
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計sairoutine
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証Yuta Matsumura
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案樽八 仲川
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 

What's hot (20)

Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
 
OpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクルOpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクル
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
シングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のりシングルサインオンの歴史とSAMLへの道のり
シングルサインオンの歴史とSAMLへの道のり
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
 
認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜
 
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 

Similar to OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015

OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜Masaru Kurahayashi
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
Authlete overview
Authlete overviewAuthlete overview
Authlete overviewmtisol
 
FacebookとWordPressを連携させて、広告費0円の自動集客システムを作る方法
FacebookとWordPressを連携させて、広告費0円の自動集客システムを作る方法FacebookとWordPressを連携させて、広告費0円の自動集客システムを作る方法
FacebookとWordPressを連携させて、広告費0円の自動集客システムを作る方法DREAMHIVE CO., LTD.
 
プロトコルから見るID連携
プロトコルから見るID連携プロトコルから見るID連携
プロトコルから見るID連携Naohiro Fujie
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方kwatch
 
Laravelの認証について
Laravelの認証についてLaravelの認証について
Laravelの認証についてTakeo Noda
 
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Toru Yamaguchi
 
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014Takashi Yahata
 
HTTP/2 draft 14 preview and IETF90 httpbis WG Report
HTTP/2 draft 14 preview and IETF90 httpbis WG ReportHTTP/2 draft 14 preview and IETF90 httpbis WG Report
HTTP/2 draft 14 preview and IETF90 httpbis WG ReportKaoru Maeda
 
FAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのためにFAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのためにNat Sakimura
 
IETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjpIETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjpKaoru Maeda
 
GoodBye AD FS - Azure Active Directory Only の認証方式へ切り替えよう!
GoodBye AD FS - Azure Active Directory Only の認証方式へ切り替えよう!GoodBye AD FS - Azure Active Directory Only の認証方式へ切り替えよう!
GoodBye AD FS - Azure Active Directory Only の認証方式へ切り替えよう!Yusuke Kodama
 
大規模BIクラウドWebサービスの裏側
大規模BIクラウドWebサービスの裏側 大規模BIクラウドWebサービスの裏側
大規模BIクラウドWebサービスの裏側 Mitch Okamoto
 
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Takahiro Yonei
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressAkinari Tsugo
 
HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計Kazuho Oku
 
GPU on OpenStack - GPUインターナルクラウドのベストプラクティス - OpenStack最新情報セミナー 2017年7月
GPU on OpenStack - GPUインターナルクラウドのベストプラクティス - OpenStack最新情報セミナー 2017年7月GPU on OpenStack - GPUインターナルクラウドのベストプラクティス - OpenStack最新情報セミナー 2017年7月
GPU on OpenStack - GPUインターナルクラウドのベストプラクティス - OpenStack最新情報セミナー 2017年7月VirtualTech Japan Inc.
 

Similar to OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015 (20)

OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
Standard-based Identity (1)
Standard-based Identity (1)Standard-based Identity (1)
Standard-based Identity (1)
 
Authlete overview
Authlete overviewAuthlete overview
Authlete overview
 
FacebookとWordPressを連携させて、広告費0円の自動集客システムを作る方法
FacebookとWordPressを連携させて、広告費0円の自動集客システムを作る方法FacebookとWordPressを連携させて、広告費0円の自動集客システムを作る方法
FacebookとWordPressを連携させて、広告費0円の自動集客システムを作る方法
 
プロトコルから見るID連携
プロトコルから見るID連携プロトコルから見るID連携
プロトコルから見るID連携
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
Laravelの認証について
Laravelの認証についてLaravelの認証について
Laravelの認証について
 
web server
web serverweb server
web server
 
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
 
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
 
HTTP/2 draft 14 preview and IETF90 httpbis WG Report
HTTP/2 draft 14 preview and IETF90 httpbis WG ReportHTTP/2 draft 14 preview and IETF90 httpbis WG Report
HTTP/2 draft 14 preview and IETF90 httpbis WG Report
 
FAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのためにFAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのために
 
IETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjpIETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjp
 
GoodBye AD FS - Azure Active Directory Only の認証方式へ切り替えよう!
GoodBye AD FS - Azure Active Directory Only の認証方式へ切り替えよう!GoodBye AD FS - Azure Active Directory Only の認証方式へ切り替えよう!
GoodBye AD FS - Azure Active Directory Only の認証方式へ切り替えよう!
 
大規模BIクラウドWebサービスの裏側
大規模BIクラウドWebサービスの裏側 大規模BIクラウドWebサービスの裏側
大規模BIクラウドWebサービスの裏側
 
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
 
HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計
 
GPU on OpenStack - GPUインターナルクラウドのベストプラクティス - OpenStack最新情報セミナー 2017年7月
GPU on OpenStack - GPUインターナルクラウドのベストプラクティス - OpenStack最新情報セミナー 2017年7月GPU on OpenStack - GPUインターナルクラウドのベストプラクティス - OpenStack最新情報セミナー 2017年7月
GPU on OpenStack - GPUインターナルクラウドのベストプラクティス - OpenStack最新情報セミナー 2017年7月
 

More from Toru Yamaguchi

これからの Microservices
これからの Microservicesこれからの Microservices
これからの MicroservicesToru Yamaguchi
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術Toru Yamaguchi
 
技術選択とアーキテクトの役割 (要約版)
技術選択とアーキテクトの役割 (要約版)技術選択とアーキテクトの役割 (要約版)
技術選択とアーキテクトの役割 (要約版)Toru Yamaguchi
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
How to bake delicious cookie (RESTful Meetup #03)
How to bake delicious cookie (RESTful Meetup #03)How to bake delicious cookie (RESTful Meetup #03)
How to bake delicious cookie (RESTful Meetup #03)Toru Yamaguchi
 
JSON Based Web Services
JSON Based Web ServicesJSON Based Web Services
JSON Based Web ServicesToru Yamaguchi
 
Yapc asia 2011_zigorou
Yapc asia 2011_zigorouYapc asia 2011_zigorou
Yapc asia 2011_zigorouToru Yamaguchi
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platformToru Yamaguchi
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
mbga Open Platform and Perl
mbga Open Platform and Perlmbga Open Platform and Perl
mbga Open Platform and PerlToru Yamaguchi
 
Inside mbga Open Platform API architecture
Inside mbga Open Platform API architectureInside mbga Open Platform API architecture
Inside mbga Open Platform API architectureToru Yamaguchi
 
Introduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 RevivalIntroduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 RevivalToru Yamaguchi
 
Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0Toru Yamaguchi
 
The Security of OpenID Authentication 2.0
The Security of OpenID Authentication 2.0The Security of OpenID Authentication 2.0
The Security of OpenID Authentication 2.0Toru Yamaguchi
 
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderCustomization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderToru Yamaguchi
 

More from Toru Yamaguchi (20)

これからの Microservices
これからの Microservicesこれからの Microservices
これからの Microservices
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術
 
技術選択とアーキテクトの役割 (要約版)
技術選択とアーキテクトの役割 (要約版)技術選択とアーキテクトの役割 (要約版)
技術選択とアーキテクトの役割 (要約版)
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
How to bake delicious cookie (RESTful Meetup #03)
How to bake delicious cookie (RESTful Meetup #03)How to bake delicious cookie (RESTful Meetup #03)
How to bake delicious cookie (RESTful Meetup #03)
 
JSON Based Web Services
JSON Based Web ServicesJSON Based Web Services
JSON Based Web Services
 
Yapc asia 2011_zigorou
Yapc asia 2011_zigorouYapc asia 2011_zigorou
Yapc asia 2011_zigorou
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
mbga Open Platform and Perl
mbga Open Platform and Perlmbga Open Platform and Perl
mbga Open Platform and Perl
 
Inside mbga Open Platform API architecture
Inside mbga Open Platform API architectureInside mbga Open Platform API architecture
Inside mbga Open Platform API architecture
 
Introduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 RevivalIntroduction OpenID Authentication 2.0 Revival
Introduction OpenID Authentication 2.0 Revival
 
OpenID Mobile Profile
OpenID Mobile ProfileOpenID Mobile Profile
OpenID Mobile Profile
 
Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0Introduction OpenID Authentication 2.0
Introduction OpenID Authentication 2.0
 
OpenID 2009
OpenID 2009OpenID 2009
OpenID 2009
 
Mobile Openid
Mobile OpenidMobile Openid
Mobile Openid
 
Client Side Cache
Client Side CacheClient Side Cache
Client Side Cache
 
The Security of OpenID Authentication 2.0
The Security of OpenID Authentication 2.0The Security of OpenID Authentication 2.0
The Security of OpenID Authentication 2.0
 
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::LoaderCustomization of DBIC::Schema::Loader
Customization of DBIC::Schema::Loader
 
Yadis/XRI and OpenID
Yadis/XRI and OpenIDYadis/XRI and OpenID
Yadis/XRI and OpenID
 

OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015

  • 1. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   OAuth 2.0 Web Messaging Response Mode OpenID Summit 2015 November  10,  2015   Toru  Yamaguchi   Senior  Architect     Sub  Business  Unit  Head   Open  Pla=orm  Business  Unit   DeNA  Co.,  Ltd.    
  • 2. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   講演者紹介   !  ⽒氏名   ⁃  ⼭山⼝口  徹  (やまぐち  とおる)   !  HN   ⁃  @zigorou   !  会社   ⁃  株式会社ディー・エヌ・エー   !  部署   ⁃  オープンプラットフォーム事業本部   !  役職   ⁃  副事業本部⻑⾧長  シニアアーキテクト   !  仕事   ⁃  Mobage  やその他協業案件などにおける システム設計がメイン   2  
  • 3. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   本⽇日の概要   !  OAuth  2.0  の  Authorization  Endpoint  からのレスポンスの受信形式 として新しいドラフトである  OAuth  2.0  Web  Messaging  Response   Mode  を作ったので、それの詳細について以下の流流れで解説します   !  OAuth  2.0  の  Redirect  URI  について   !  OAuth  2.0  Form  Post  Response  Mode   !  OAuth  2.0  Web  Messaging  Response  Mode   3  
  • 4. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   OAuth  2.0  と  Redirect  URI   OAuth  2.0  Web  Messaging  Response  Mode   4  
  • 5. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   OAuth  2.0  とは本質的に何をやりたい枠組みなのか   !  もの凄く簡略略化して⾔言えば、Client  が  (End  User  の権限を持つ)  Access   Token  を  Authorization  Server  から得るためのフレームワークが   OAuth  2.0  だと⾔言えます   ⁃  その結果得た  Access  Token  を⽤用いて  Protected  Resource  (要は   API)  にアクセスする   5   End  User   AuthorizaDon  Server   Client   1.  Redierct  to  AuthorizaDon  Request   2.  AuthorizaDon  Request   3.  AuthorizaDon  Response  4.  Redirect  to     Redirect  URI   5.  Token  Request   6.  Token  Response  
  • 6. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   AuthorizaGon  Code  Grant  のシーケンス   !  Authorization  Response  は  Redirect  URI  に対する  UserAgent  を介し た  HTTP  リダイレクションで渡される   6   hQp://goo.gl/kfZTNY  
  • 7. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   AuthorizaGon  Request   !  上記は  RFC  6749  での  Authorization  Code  Grant  での  Authorization   Request  のサンプルです   7   GET  /authorize?        response_type=code&        client_id=s6BhdRkqt3&        state=xyz&        redirect_uri=https%3A%2F%2Fclient%2Eexample %2Ecom%2Fcb  HTTP/1.1   Host:  server.example.com  
  • 8. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   AuthorizaGon  Response   !  上記は  RFC  6749  での  Authorization  Code  Grant  での  Authorization   Response  のサンプルです   8   HTTP/1.1  302  Found   Location:  https://client.example.com/cb?        code=SplxlOBeZQQYbYS6WxSbIA&        state=xyz  
  • 9. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Implicit  Grant  のシーケンス   !  Implicit  Grant  は  Token  Response  が  Authorization  Endpoint  から   HTTP  リダイレクションで返って来る   ⁃  Access  Token  などは  URI  Fragment  (#  以下の⽂文字列列)  として 返って来るため  JavaScript  などによる  parse  が必要   9   hQp://goo.gl/95ddOd  
  • 10. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Redirect  URI  と問題点   !  様々ありますが例例えば以下のような課題があります   ⁃  User  Agent  を介した  HTTP  リダイレクションのため、中間者攻 撃が成⽴立立し得る   ⁃  HTTP  リダイレクションが発⽣生するため  UX  が  Single  Page   Application  向きではない   ⁃  Implicit  の場合は  Protected  Resource  にアクセスするための   Access  Token  が  JavaScript  などで触れる領領域に渡されるため、 XSS  などで  Access  Token  そのものが奪われるリスクがある   !  今回の  Web  Message  Response  Mode  は上記のような課題感がモチ ベーションになっています   10  
  • 11. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   OAuth  2.0  Form  Post  Response  Mode   OAuth  2.0  Web  Messaging  Response  Mode   11  
  • 12. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Form  Post  Response  Mode  とは何か?   !  Spec   ⁃  https://openid.net/specs/oauth-‐‑‒v2-‐‑‒form-‐‑‒post-‐‑‒response-‐‑‒ mode-‐‑‒1_̲0.html   !  Authorization  Endpoint  からのレスポンスを  HTTP  リダイレクショ ンではなく、JavaScript  を⽤用いた  form  の⾃自動  POST  に差し替えたもの   !  まずはプロトコルについて流流れを追ってみましょう   12  
  • 13. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   AuthorizaGon  Code  Grant  のシーケンス  /w  form  post   !  Authorization  Response  の渡し⽅方が  form  の⾃自動  submit  になって います   ⁃  それ以外は本質的な違いはありません   13   hQp://goo.gl/3ci98I  
  • 14. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   AuthorizaGon  Request   !  通常の  Authorization  Request  と異異なる点は  response_̲mode  に   form_̲post  という値を指定している点です   14   GET  /authorize?        response_type=id_token        &response_mode=form_post        &client_id=some_client        &scope=openid        &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcallback        &state=DcP7csa3hMlvybERqcieLHrRzKBra        &nonce=2T1AgaeRTGTMAJyeDMN9IJbgiUG  HTTP/1.1      Host:  server.example.com  
  • 15. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   AuthorizaGon  Request   !  通常の  Authorization  Request  と異異なる点は  response_̲mode  に   form_̲post  という値を指定している点です   15   GET  /authorize?        response_type=id_token        &response_mode=form_post        &client_id=some_client        &scope=openid        &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcallback        &state=DcP7csa3hMlvybERqcieLHrRzKBra        &nonce=2T1AgaeRTGTMAJyeDMN9IJbgiUG  HTTP/1.1      Host:  server.example.com  
  • 16. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   AuthorizaGon  Response  (1)   !  指定された  Redirect  URI  に対して  HTTP  メソッドの  POST  で⾃自動的に   Submit  するようなレスポンスを返します   16   HTTP/1.1  200  OK   Content-­‐Type:  text/html;charset=UTF-­‐8   Cache-­‐Control:  no-­‐cache,  no-­‐store   Pragma:  no-­‐cache   <html>      <head><title>Submit  This  Form</title></head>      <body  onload="javascript:document.forms[0].submit()">            <form  method="post"  action="https://client.example.org/callback">                  <input  type="hidden"  name="state"                      value="DcP7csa3hMlvybERqcieLHrRzKBra"/>                  <input  type="hidden"  name="id_token"                      value="eyJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJzdWIiOiJqb2huIiw                      iYXVkIjoiZmZzMiIsImp0aSI6ImhwQUI3RDBNbEo0c2YzVFR2cllxUkIiLC                      Jpc3MiOiJodHRwczpcL1wvbG9jYWxob3N0OjkwMzEiLCJpYXQiOjEzNjM5M                      DMxMTMsImV4cCI6MTM2MzkwMzcxMywibm9uY2UiOiIyVDFBZ2FlUlRHVE1B                      SnllRE1OOUlKYmdpVUciLCJhY3IiOiJ1cm46b2FzaXM6bmFtZXM6dGM6U0F                      NTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZCIsImF1dGhfdGltZSI6MTM2Mz                      kwMDg5NH0.c9emvFayy-­‐YJnO0kxUNQqeAoYu7sjlyulRSNrru1ySZs2qwqq                      wwq-­‐Qk7LFd3iGYeUWrfjZkmyXeKKs_OtZ2tI2QQqJpcfrpAuiNuEHII-­‐_fk                      IufbGNT_rfHUcY3tGGKxcvZO9uvgKgX9Vs1v04UaCOUfxRjSVlumE6fWGcq                      XVEKhtPadj1elk3r4zkoNt9vjUQt9NGdm1OvaZ2ONprCErBbXf1eJb4NW_h                      nrQ5IKXuNsQ1g9ccT5DMtZSwgDFwsHMDWMPFGax5Lw6ogjwJ4AQDrhzNCFc                      0uVAwBBb772-­‐86HpAkGWAKOK-­‐wTC6ErRTcESRdNRe0iKb47XRXaoz5acA"/>          </form>      </body>   </html>  
  • 17. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   AuthorizaGon  Response  (2)   !  JavaScript  が実⾏行行された結果、UserAgent  は上記のようなリクエストを   Redirect  URI  に送出します   17   POST  /callback  HTTP/1.1   Host:  client.example.org   Content-­‐Type:  application/x-­‐www-­‐form-­‐urlencoded   id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJzdWIiOiJqb2huIiwiYX          VkIjoiZmZzMiIsImp0aSI6ImhwQUI3RDBNbEo0c2YzVFR2cllxUkIiLCJpc          3MiOiJodHRwczpcL1wvbG9jYWxob3N0OjkwMzEiLCJpYXQiOjEzNjM5MDMx          MTMsImV4cCI6MTM2MzkwMzcxMywibm9uY2UiOiIyVDFBZ2FlUlRHVE1BSnl          lRE1OOUlKYmdpVUciLCJhY3IiOiJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTD          oyLjA6YWM6Y2xhc3NlczpQYXNzd29yZCIsImF1dGhfdGltZSI6MTM2MzkwM          Dg5NH0.c9emvFayy-­‐YJnO0kxUNQqeAoYu7sjlyulRSNrru1ySZs2qwqqwwq          -­‐Qk7LFd3iGYeUWrfjZkmyXeKKs_OtZ2tI2QQqJpcfrpAuiNuEHII-­‐_fkIuf          bGNT_rfHUcY3tGGKxcvZO9uvgKgX9Vs1v04UaCOUfxRjSVlumE6fWGcqXVE          KhtPadj1elk3r4zkoNt9vjUQt9NGdm1OvaZ2ONprCErBbXf1eJb4NW_hnrQ          5IKXuNsQ1g9ccT5DMtZSwgDFwsHMDWMPFGax5Lw6ogjwJ4AQDrhzNCFc0uV          AwBBb772-­‐86HpAkGWAKOK-­‐wTC6ErRTcESRdNRe0iKb47XRXaoz5acA&      state=DcP7csa3hMlvybERqcieLHrRzKBra  
  • 18. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Form  Post  Response  Mode  の利利点は何か   !  GET  メソッドで⽤用いる  URI  の最⼤大⻑⾧長を気にしなくて良良い   ⁃  RFC  では制限はないが  UserAgent  側の制限と  HTTP  Server  側 の制限がある   !  サンプルの  Authorization  Request  で指定されている  response_̲type   で  id_̲token  が指定されていて、POST  で直接サーバーに渡している 点に注⽬目   ⁃  本来  URI  Fragment  で渡すのが筋  (OpenID  Connect  1.0)   ⁃  つまり  Browser  相⼿手の場合は  JavaScript  で  parse  する必要があ る   •  ID  Token  は  JWT  なので  JWS  or  JWE  でエンコードされているため、あ まりユースケースが無いと⾔言える   ⁃  ⼀一⽅方  Form  Post  を⽤用いた場合は  Implicit  相当の⼿手続きで  ID   Token  を  Server  に渡す事が出来る   !  response_̲mode  という新しい語彙を定義した   ⁃  要するにこれが⾔言いたかっただけです!   18  
  • 19. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   OAuth  2.0  Web  Messaging  Response  Mode   OAuth  2.0  Web  Messaging  Response  Mode   19  
  • 20. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   OAuth  2.0  Web  Messaging  Response  Mode   !  Spec   ⁃  https://tools.ietf.org/html/draft-‐‑‒sakimura-‐‑‒oauth-‐‑‒wmrm-‐‑‒00   !  サマリ   ⁃  postMessage()  を⽤用いた新しい  response_̲mode  である   web_̲message  を定義   •  元々同じコンセプトの先⾏行行実装として  Google+  SignIn  があり、その後   Mobage  Connect  でも似たような仕組みを構築   ⁃  レスポンス形式に  simple,  relay  モードの⼆二つを定義している   •  特に  relay  モードは  Access  Token  の隠蔽を⾏行行うことが出来る点に新規 性がある   20  
  • 21. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Redirect  URI  と問題点  (再掲)   !  様々ありますが例例えば以下のような課題があります   ⁃  User  Agent  を介した  HTTP  リダイレクションのため、中間者攻 撃が成⽴立立し得る   ⁃  HTTP  リダイレクションが発⽣生するため  UX  が  Single  Page   Application  向きではない   ⁃  Implicit  の場合は  Protected  Resource  にアクセスするための   Access  Token  が  JavaScript  などで触れる領領域に渡されるため、 XSS  などで  Access  Token  そのものが奪われるリスクがある   !  今回の  Web  Message  Response  Mode  は上記のような課題感がモチ ベーションになっています   21  
  • 22. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   SPA  向けの  UX  は何か   !  どんな要件を満たすべきか   ⁃  Single  Page  Application  なのだから、アプリケーションその物 は画⾯面遷移でページ全体が書き換わるような挙動をさせたくない   ⁃  とはいえログインフォームのように重要な情報を  submit  するフ ォームをロケーションバーを表⽰示せずに表⽰示するのはあり得ない   !  これらを満たすのは  window.open()  による新しい  window  の作成を ⾏行行い、その  window  で  Authorization  Grant  を⾏行行い、Authorization   Response  を元のページに渡すという仕組み   ⁃  これが  Web  Messaging  Response  Mode  の原点   ⁃  呼び出し元の  window  と新しい  window  間は  frame  間通信   (window.postMessage())  を使えば実現出来る   22  
  • 23. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   UnauthenGcated  Window  と  Messaging  (simple  mode)   !  Unauthenticated  Window  とは新しい  window  を開いて、End  User  が未認証状態でも必要な⼿手続きを経て  Authorization  を⾏行行う事が出来る   window  の事です   23   Main  Window   (Public  Client)   UnauthenDcated   Window   AuthorizaDon     Server   window.addEventListener(      “message”,      authorizationResponseListener,      false   );   var  win  =        window.open(          “https://as.example.com/authorize?...”,            “_new”      );   window.opener.postMessage(      authorizationResponse,      redirectURI   );   1.  Window  の⽣生成と   AuthorizaDon  Request  の設定   2.  AuthorizaDon  Request   3.  AuthorizaDon  Response  4.  AuthorizaDon  Response  の メッセージ送信  
  • 24. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Immediate  Login  [1]   !  OpenID  Connect  による拡張の⼀一つで、AuthZ  Request  に  prompt  パラメ ータに  none  を指定すると  Immediate  Login  が出来る   ⁃  認証・認可状態に応じてユーザーとのインタラクションを求めず即時 にレスポンスが返って来る   ⁃  ユーザーがサイトに往訪した際にこの⼿手続きを裏裏で進めるような使い ⽅方をします   24   GET  /authorize?      response_type=code&      scope=openid%20profile&      client_id=s6BhdRkqt3&      state=xyz123&      prompt=none&      redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb      HTTP/1.1   HTTP/1.1  302  Found   Location:  https://client.example.org/cb?      error=login_required&      state=xyz123   1.  AuthorizaDon  Request   2.  AuthorizaDon  Request  
  • 25. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Immediate  Login  [2]   !  Immediate  Login  は通常は  iframe  を作成して⾏行行う   ⁃  iframe  の  load  イベントが発⽣生した際に  iframe  の  src  属性が   Redirect  URI  になっていれば良良いのだが、、、実はなっていない   ⁃  従って  Redirect  URI  で  postMessage  を⽤用いて  Main  Window   に通知するような仕組みがほとんどだと思われる   25   Main  Window   (Public  Client)   AuthenDcated   Window   1.  iframe  の⽣生成と   AuthorizaDon  Request  の設定   4.  AuthorizaDon  Response  を   load  イベントで取得   (これは出来ない)   AuthorizaDon     Server   var  iframe  =  document.createElement(“iframe”);   iframe.addEventListener(      “load”,        authorizationResponseListener,        false   );   iframe.src  =  “https://as.example.com/authorize?...”;   2.  AuthorizaDon  Request   3.  AuthorizaDon  Response  
  • 26. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   AuthenGcated  Window  と  Messaging  (simple  mode)   !  Authenticated  Window  とは  iframe  を作って、End  User  が認証・ 認可状態の際に  Authorization  を⾏行行う事が出来る  window  の事です   26   Main  Window   (Public  Client)   AuthenDcated   Window   AuthorizaDon     Server   window.addEventListener(      “message”,      authorizationResponseListener,      false   );   var  win  =        document.createElement(“iframe”);   iframe.src  =        “https://as.example.com/authorize?..”;   window.parent.postMessage(      authorizationResponse,      redirectURI   );   1.  iframe  の⽣生成と   AuthorizaDon  Request  の設定   2.  AuthorizaDon  Request   3.  AuthorizaDon  Response  4.  AuthorizaDon  Response  の メッセージ送信  
  • 27. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   ここまでのまとめ   !  結局この  Response  Mode  で何が嬉しいか   ⁃  window.open()  を⽤用いる事によって  Redirect  が⾏行行われないので   SPA  に向いたフローになっている   •  Mobage  JavaScript  SDK  では同等のフローを実現しています   ⁃  ログインフォームや認可画⾯面をユーザーに⾒見見せる場合   (Unauthenticated  Window)  でも、Immediate  Login   (Authenticated  Window)  でも⼿手続きが同じようになる   •  特に認可サーバー側がこの  Response  Mode  を実装する際に楽になる   !  引き続いて  relay  mode  について説明していきます   27  
  • 28. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Hybrid  Flow  と  scope  について  [1]   !  Hybrid  Flow  とは  OpenID  Connect  で新しく定義されたフローで、 Implicit  と  Authorization  Code  を⼀一度度の⼿手続きで⾏行行うための仕組みで す   ⁃  どのように実現しているかと⾔言えば  response_̲type  に複数の値 をスペース区切切りで指定します   28   Redirect   Endpoint   (public  client)   AuthorizaDon     Server   1.  AuthorizaDon  Response   AuthorizaDon     Endpoint   Token   Endpoint   Client  Server   (confidenDal  client)   2.  Token  Request   3.  Token  Response   code,  access_token(implicit),   id_token(implicit)  が取得出 来る   access_token(authorizaDon_c ode)  などが取得出来る   Protected   Resource   Server   API   access   API   access  
  • 29. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Hybrid  Flow  と  scope  について  [2]   !  Authorization  Request  で指定出来る  scope  は  Authorization  Code/ Implicit  の区別を付ける事が出来ない   ⁃  ⼀一⽅方で  Implicit  で発⾏行行した  access  token  では付与したくない権 限もしばしばある   ⁃  その理理由はやはり  confidential  client  に⽐比べて  public  client  の ⽅方が脆弱であるという前提があるからだと思います   !  そもそも  public  client  についてやらせたい事は、access  token  を渡 す事ではなく、access  token  を使った  API  コールをやらせたい   ⁃  つまり上⼿手く  access  token  が流流出しないような仕組みが作れたら   Hybrid  Flow  ⾃自体、安全になるでしょうし許容出来る  scope  も もっと増やしても良良いかもしれない。   29  
  • 30. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   UnauthenGcated  Window  と  Messaging  (relay  mode)   !  Main  Window  に対して  Relay  Request/Response  を⾏行行う事で  Main   Window  の  window  オブジェクトの参照を得ます   ⁃  その  window  の  frames  プロパティを使うと異異なる  origin  でも メッセージを送信出来ます   30   Main  Window   (Public  Client)   UnauthenDcated   Window   Protected     Resource  Server   2.  Window  の⽣生成と   AuthorizaDon  Request  の設定   2.  AuthorizaDon  Request   3.  AuthorizaDon  Response   4.  Relay  Request   5.  Relay  Response   Message  Targeted   Window   1.  iframe  の⽣生成   AuthorizaDon   Server   6.  AuthorizaDon  Response  の   メッセージ送信   API  Access  
  • 31. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Relay  Mode  と  JavaScript  SDK   !  前ページの図から分かる通り、Authorization  Response  (特に  access   token)  が  Message  Targeted  Window  に閉じ込められます   ⁃  つまり  Main  Window  に直接  access  token  は渡されない   !  ⼀一⽅方で  Main  Window  と  Message  Targeted  Window  は親⼦子関係に あるので、window.postMessage()  を⽤用いて  API  の  request/ response  をハンドリングすれば  access  token  を隠蔽したまま  API   アクセスさせるという⽬目的を達する事が出来る   ⁃  よりセキュアにやりたい事だけやらせる事が出来ます   31  
  • 32. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   補⾜足   !  ここまで説明した⼿手続きですが  IE11  までは  window.postMessage()  に致命的なバグがあり、期待通りに動きません   ⁃  Edge  では解消しているらしいです   32  
  • 33. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   今後の展開について   !  以下のようになって⾏行行くと良良いなと思っています   ⁃  draft  のブラッシュアップ   ⁃  ⼀一部の  Message  送受信⽤用  window  を  Web  Worker  で代⽤用   •  UI  スレッドとは別に動くので、より⾼高速な⼿手続きが期待出来る   •  まだ未検証です   33  
  • 34. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   まとめ   !  Web  Message  Response  Mode  は以下の特徴があります   ⁃  Redirect  ベースではないので  SPA  の  UX  を損ねない   ⁃  Immediate  Login  であろうと無かろうと同じ⼿手続きで実現が出来 る   !  さらに  relay  mode  では以下の特徴があります   ⁃  Main  Window  に  access  token  を直接渡さないので安全性が増 します   ⁃  必然的に  Message  Targeted  Window  で  API  呼び出しを分離離、 抽象化する事が出来ます   34  
  • 35. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   ご清聴ありがとうございました   !  時間があれば質疑応答   35