View
9
Download
0
Category
Preview:
Citation preview
OAuth 2.0 & OpenId
報告大綱
OpenID
• OpenID概念
• OpenID主要角色
• OpenID登入流程
• OpenID優點及風險
• OpenID與OAuth比較
• OpenID與OAuth使用情境
OAuth
• OAuth 角色
• OAuth 名詞解釋
• OAuth 2 主要流程
• Demo
OpenID 概念
何謂OpenID?
• 一組帳號走天下(Single Sign-On)
• OpenID分散式認證系統(數位身分資訊的標準協定)
OpenID理念
• 可以通過URL來認証一個網站的唯一身份,可以讓每個人通過一個URL(一個OpenID
身份就是一個URL) ,在多個網站上進行登入,作為用戶的身份認証
OpenID主要角色
End User
• 終端用戶,使用OpenID作為登入帳號的User
Relying Part
• OpenID支援網站,支持End User用OpenID登入自已的網站
(EX:Friday、Yahoo)
OpenID Provider
• OpenID提供方,提供OpenID註冊服務
(EX:Google、Facebook)
OpenID 登入流程
id loginType uid memberId
1 facebook 101330868
436268091
083
45821
2 windowsLive 5845624 45821
3 yahoo deaswtgf8d
4c15d
45821
OpenID 優點及風險
用戶(End User)
• 簡化注冊登入流程
• 一處注冊處處通行,免去記憶大量帳號的麻煩
網站(RP)
• 已經有相當數量的注冊用戶可以直接使用,不必從零開始,串的越多生意越好
• 如果提供OpenID驗証服務的網站關閉,可能導致大量用戶無法登入
• OpenId利用Url產生唯一值,換網域造成無法找到對應的使用者
OAuth 簡介
人 授權給程式
說「你可以去跟母站拿我的資料」
使用者EzPrice
平台廠商(Friday
Shopping)API
為何要使用OAuth
如果使用帳號、密碼讓第三方存取API…
• 第三方程式必須儲存使用者的帳號密碼,通常是明文儲存。
• 第三方程式會得到幾乎完整的權限,可以存取API,而使用者沒辦法限
制第三方程式可以拿取 API 的時效,以及可以存取的範圍。
• 使用者無法只撤回單一個第三方程式的存取權,而且必須要改密碼才能
撤回。
• 任何第三方程式被破解,就會導致使用該密碼的所有資料被破解。
OAuth 解決方式
• 透過原網站進行登入並授權
• 第三方程式存取API時使用Token而非帳號密碼
• Toekn限制API存取範圍、存活時間
• 使用者可以隨時撤銷Token
OpenID與OAuth差別
OpenID注重的是autherication, OAuth關注的是authorization
• authentication;n 証明; 鑑定;證實
• authorization n 授權,認可;批准;委任
OpenID與OAuth使用情境
OpenID
• 路人甲想使用Friday的服務,可是他不想要再多記一個密碼。
• 由於Friday支援 OpenID 的使用,所以路人甲在登入Friday網站時,他的登入帳號可以輸
入Google帳號完成登入認證後, Friday取得他在Google的唯一值做為身份確認。
OAuth
• 路人甲登入Friday後想利用將他推薦給他在Facebook中的朋友, Friday需取得他的
Facebook好友清單,並發送邀請給他的朋友
OAuth 角色 -1
1. Resource Owner -可以授權別人去存取 Protected Resource ,通常指的就是使用者。
2. Resource Server -可以根據 Access Token 來接受請求,指的就是API。
3. Client – 第三方程式,可以存取使用者的資料。
4. Authorization Server – 授權及核發 Access Token 的伺服器。
OAuth 角色 -2
人透過 OO授權 給 程式
說「你可以去跟母站拿我的資料」
Resource Owner
(使用者)
Client
(APP)
平台廠商(Facebook)
Resource Server(API)
Authorization Server
OAuth 基本流程
OAuth 2.0授權流程
OAuth 名詞解釋 -1
Client/Screet
• 用於Client(第三方APP)認證
• 註冊時取得
Redirect URI
• 使用者授權後返回的網址
• 申請應用程式時需指定
OAuth 名詞解釋 -2
Token
• AccessToken – 存取API時使用
• RefreshToken – AccessToken過期可以
利用RefreshToken換發
Scops
• 申請授權時請求的存取範圍
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類型應用程式 。
Authorization Code Grant Flow
Authorization Code Grant Flow (Server端第三方應用)
• 要向 Authorization Server 先取得 Grant Code 再取得 Access Token (兩步)。
• 適合如部署在 Server 上面的應用程式。
• 可以核發 Refresh Token。
Authorization Code Grant Flow
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
授權範圍
Authorization Code Grant Flow - 使用者登入
Authorization Code Grant Flow - 取得Code
http://www.abc.com?
code= AQCTIqBIATtPi2r77eIQ6-6NcOFBQc22YMuo3T6bIq3Fjv0_sSXgk….&
state=446c63696b24b4b6687cdff62eabce3a9c9d6333d7c807e6
Redirection Endpoint(Redirect Uri)
CSRF
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
Authorization Code Grant Flow – 存取API
Demo
Implicit Grant Flow
• Authorization Server 直接向 Client 核發 Access Token (一步)。
• 適合非常特定的 Public Clients ,例如跑在 Browser 裡面的應用程式。
• Authorization Server 不必驗證 Client 的身份。
• 禁止核發 Refresh Token。
• 需要 User-Agent Redirection。
• 有資料外洩風險。
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/
Resource Owner Password Credentials Grant Flow
• 使用者的帳號密碼直接拿來當做 Grant (授權憑證)。
• 適用於 Resource Owner 高度信賴的 Client (像是 OS 內建的)或是官方應用程式。
• 其他流程不適用時才能用。
• 可以核發 Refresh Token。
• 沒有 User-Agent Redirection
Client Credentials Grant Flow (Client 的帳號密碼)
• Client 的 ID 和 Secret 直接用來當做 Grant (授權狀)適用於跑在 Server 上
面的 Client
• 不建議核發 Refresh Token 。
• 沒有 User-Agent Redirection。
實現OAuth 2.0 Server端方法
PHP
https://github.com/thephpleague/oauth2-server
Node.JS
https://github.com/oauthjs/node-oauth2-server
參考資料
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
Recommended