oauth 2.0 & openid - hiiir lablab.hiiir.com/wp-content/uploads/2016/10/oauth.pdf · openid...
TRANSCRIPT
![Page 1: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/1.jpg)
OAuth 2.0 & OpenId
![Page 2: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/2.jpg)
報告大綱
OpenID
• OpenID概念
• OpenID主要角色
• OpenID登入流程
• OpenID優點及風險
• OpenID與OAuth比較
• OpenID與OAuth使用情境
OAuth
• OAuth 角色
• OAuth 名詞解釋
• OAuth 2 主要流程
• Demo
![Page 3: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/3.jpg)
OpenID 概念
何謂OpenID?
• 一組帳號走天下(Single Sign-On)
• OpenID分散式認證系統(數位身分資訊的標準協定)
OpenID理念
• 可以通過URL來認証一個網站的唯一身份,可以讓每個人通過一個URL(一個OpenID
身份就是一個URL) ,在多個網站上進行登入,作為用戶的身份認証
![Page 4: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/4.jpg)
OpenID主要角色
End User
• 終端用戶,使用OpenID作為登入帳號的User
Relying Part
• OpenID支援網站,支持End User用OpenID登入自已的網站
(EX:Friday、Yahoo)
OpenID Provider
• OpenID提供方,提供OpenID註冊服務
(EX:Google、Facebook)
![Page 5: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/5.jpg)
OpenID 登入流程
id loginType uid memberId
1 facebook 101330868
436268091
083
45821
2 windowsLive 5845624 45821
3 yahoo deaswtgf8d
4c15d
45821
![Page 6: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/6.jpg)
OpenID 優點及風險
用戶(End User)
• 簡化注冊登入流程
• 一處注冊處處通行,免去記憶大量帳號的麻煩
網站(RP)
• 已經有相當數量的注冊用戶可以直接使用,不必從零開始,串的越多生意越好
• 如果提供OpenID驗証服務的網站關閉,可能導致大量用戶無法登入
• OpenId利用Url產生唯一值,換網域造成無法找到對應的使用者
![Page 7: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/7.jpg)
OAuth 簡介
人 授權給程式
說「你可以去跟母站拿我的資料」
使用者EzPrice
平台廠商(Friday
Shopping)API
![Page 8: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/8.jpg)
為何要使用OAuth
如果使用帳號、密碼讓第三方存取API…
• 第三方程式必須儲存使用者的帳號密碼,通常是明文儲存。
• 第三方程式會得到幾乎完整的權限,可以存取API,而使用者沒辦法限
制第三方程式可以拿取 API 的時效,以及可以存取的範圍。
• 使用者無法只撤回單一個第三方程式的存取權,而且必須要改密碼才能
撤回。
• 任何第三方程式被破解,就會導致使用該密碼的所有資料被破解。
![Page 9: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/9.jpg)
OAuth 解決方式
• 透過原網站進行登入並授權
• 第三方程式存取API時使用Token而非帳號密碼
• Toekn限制API存取範圍、存活時間
• 使用者可以隨時撤銷Token
![Page 10: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/10.jpg)
OpenID與OAuth差別
OpenID注重的是autherication, OAuth關注的是authorization
• authentication;n 証明; 鑑定;證實
• authorization n 授權,認可;批准;委任
![Page 11: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/11.jpg)
OpenID與OAuth使用情境
OpenID
• 路人甲想使用Friday的服務,可是他不想要再多記一個密碼。
• 由於Friday支援 OpenID 的使用,所以路人甲在登入Friday網站時,他的登入帳號可以輸
入Google帳號完成登入認證後, Friday取得他在Google的唯一值做為身份確認。
OAuth
• 路人甲登入Friday後想利用將他推薦給他在Facebook中的朋友, Friday需取得他的
Facebook好友清單,並發送邀請給他的朋友
![Page 12: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/12.jpg)
OAuth 角色 -1
1. Resource Owner -可以授權別人去存取 Protected Resource ,通常指的就是使用者。
2. Resource Server -可以根據 Access Token 來接受請求,指的就是API。
3. Client – 第三方程式,可以存取使用者的資料。
4. Authorization Server – 授權及核發 Access Token 的伺服器。
![Page 13: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/13.jpg)
OAuth 角色 -2
人透過 OO授權 給 程式
說「你可以去跟母站拿我的資料」
Resource Owner
(使用者)
Client
(APP)
平台廠商(Facebook)
Resource Server(API)
Authorization Server
![Page 14: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/14.jpg)
OAuth 基本流程
OAuth 2.0授權流程
![Page 15: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/15.jpg)
OAuth 名詞解釋 -1
Client/Screet
• 用於Client(第三方APP)認證
• 註冊時取得
Redirect URI
• 使用者授權後返回的網址
• 申請應用程式時需指定
![Page 16: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/16.jpg)
OAuth 名詞解釋 -2
Token
• AccessToken – 存取API時使用
• RefreshToken – AccessToken過期可以
利用RefreshToken換發
Scops
• 申請授權時請求的存取範圍
![Page 17: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/17.jpg)
OAuth 2.0 四種協定
授權流程 說明
Authorization Code Grant
Flow
Client 端是Web Server,可透過Web Server發送請求,適用
所有Server端的第三方應用程式。
Implicit Grant Flow又稱User-Agent Flow,此流程適用於所有無Server端配合的
應用程式,例如:運作在瀏覽器內的JavaScript應用程式。
Resource Owner Password
Credentials
此流程需應用程式直接要求輸入使用者的帳號及密碼再到認證
伺服器取得訪問權杖(AccessToken),使用者需高度信任第三
方應用程式,通常為官方應用程式或是其他流程不適用時才使
用本流程。
Client Credentials採用Client Id 及 Client Secret獲取Access Token,適用於任
何Server類型應用程式 。
![Page 18: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/18.jpg)
Authorization Code Grant Flow
Authorization Code Grant Flow (Server端第三方應用)
• 要向 Authorization Server 先取得 Grant Code 再取得 Access Token (兩步)。
• 適合如部署在 Server 上面的應用程式。
• 可以核發 Refresh Token。
![Page 19: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/19.jpg)
Authorization Code Grant Flow
![Page 20: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/20.jpg)
Authorization Code Grant Flow - 請求授權
https://graph.facebook.com/oauth/authorize?
response_type=code&
client_id= 176121295767847&
redirect_uri=http://www.abc.com/&
state=446c63696b24b4b6687cdff62ea bce3a9c9d6333d7c807e6&
scope=email
Endpoints
Authorization Code Grant Flow
ClientId 申請時取得
授權後返回網址(需和申請時一樣)
CSRF
授權範圍
![Page 21: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/21.jpg)
Authorization Code Grant Flow - 使用者登入
![Page 22: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/22.jpg)
Authorization Code Grant Flow - 取得Code
http://www.abc.com?
code= AQCTIqBIATtPi2r77eIQ6-6NcOFBQc22YMuo3T6bIq3Fjv0_sSXgk….&
state=446c63696b24b4b6687cdff62eabce3a9c9d6333d7c807e6
Redirection Endpoint(Redirect Uri)
CSRF
![Page 23: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/23.jpg)
Authorization Code Grant Flow - 取得AccessToken
POST
https://graph.facebook.com/oauth/access_token
grant_type=authorization_code&
code=AQABIWdeO3miePq0uH2VCUvhGrvoXz3zunrCiX5Bz9IFF8m82bmP&
redirect_uri=http://www.abc.com/
Token Endpoint
![Page 24: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/24.jpg)
Authorization Code Grant Flow – 存取API
![Page 25: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/25.jpg)
Demo
![Page 26: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/26.jpg)
Implicit Grant Flow
• Authorization Server 直接向 Client 核發 Access Token (一步)。
• 適合非常特定的 Public Clients ,例如跑在 Browser 裡面的應用程式。
• Authorization Server 不必驗證 Client 的身份。
• 禁止核發 Refresh Token。
• 需要 User-Agent Redirection。
• 有資料外洩風險。
![Page 27: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/27.jpg)
Implicit Grant Flow 參數說明
GET
https://www.facebook.com/dialog/oauth
grant_type= client_credentials&
client_id= 176121295767847&
scop=email
redirect_uri=http://server.soez.tw/
![Page 28: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/28.jpg)
Resource Owner Password Credentials Grant Flow
• 使用者的帳號密碼直接拿來當做 Grant (授權憑證)。
• 適用於 Resource Owner 高度信賴的 Client (像是 OS 內建的)或是官方應用程式。
• 其他流程不適用時才能用。
• 可以核發 Refresh Token。
• 沒有 User-Agent Redirection
![Page 29: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/29.jpg)
Client Credentials Grant Flow (Client 的帳號密碼)
• Client 的 ID 和 Secret 直接用來當做 Grant (授權狀)適用於跑在 Server 上
面的 Client
• 不建議核發 Refresh Token 。
• 沒有 User-Agent Redirection。
![Page 30: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/30.jpg)
實現OAuth 2.0 Server端方法
PHP
https://github.com/thephpleague/oauth2-server
Node.JS
https://github.com/oauthjs/node-oauth2-server
![Page 31: OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID 優點及風險 用戶(End User) •簡化注冊登入流程 •一處注冊處處通行,免去記憶大量帳號的麻煩](https://reader030.vdocuments.site/reader030/viewer/2022040208/5e22e6c4ed6739694d7d852b/html5/thumbnails/31.jpg)
參考資料
OAuth 2.0 筆記 世界觀
http://blog.yorkxin.org/posts/2013/09/30/oauth2-1-introduction/
簡單易懂的 OAuth 2
https://speakerdeck.com/chitsaou/jian-dan-yi-dong-de-oauth-2-dot-0