OAuth 2.0 & OpenId - Hiiir Lablab.hiiir.com/wp-content/uploads/2016/10/OAuth.pdf · OpenID...

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