OAuth2.0 開發受權協議安全
四種角色:服務器
Resource Owner 用戶: 資源擁有者資源
Resource Server 資源服務器: 資源託管服務器開發
Auth Server 受權服務器: 認證受權服務器認證授權
Client 客戶端: 須要訪問用戶資源的第三方應用程序程序
典型應用情景: 密碼
Client 須要訪問用戶在資源服務器中的私有資源。客戶端
最直接粗暴的方式: Client 中經過用戶名、密碼來訪問資源服務器私有資源。 協議
此方式的弱點是: 用戶名、密碼暴露給Client了, 致使資源服務器不安全。word
因此按照抽象理論則應該抽象出一個抽象層出來,不是直接經過UserName/Password來訪問資源服務器, 這個抽象層就是Token, 此Token具備過時時間等設定從而經過這個抽象層來保證資源服務器的安全。
故如今的問題是怎麼獲取到Token。
在OAuth2.0 中提供了四種方式來獲取Token:
受權碼
簡單模式
用戶名、密碼方式
客戶端模式
在OAuth2.0 的體系下首先有個前提條件是:
全部Client 都須要在認證服務器中進行註冊來代表Client能夠從認證服務器中獲取Token,其中註冊的消息: ClientId 、 ClientSecret、RedirectUri。
受權碼模式:
一、Client 訪問 Auth Server (stirng GetCode(ClientId,ClientSecret)) 經過ClientId,ClientSecret換取受權Code
二、Client 訪問 Auth Server (Json GetToken(ClientId,ClientSecret,Code)) 經過Code換取Token
三、Client 利用Token來訪問資源服務器
簡單模式:
一、Client 訪問 Auth Server (Json GetToken(ClientId,ClientSecret)) 經過ClientId,ClientSecret換取Token
二、Client 利用Token來訪問資源服務器
用戶名、密碼模式:
一、Client 訪問 Auth Server (Json GetToken(ClientId,ClientSecret,UserName,Password)) 經過ClientId,ClientSecret,UserName,Password換取Token,注意Client不能保存UserName和Password
二、Client 利用Token來訪問資源服務器
客戶端模式:
一、Client 訪問 Auth Server (Json GetToken(ClientId,ClientSecret)) 經過ClientId,ClientSecret換取Token
二、Client 利用Token來訪問資源服務器
從上面的整個流程來看就是利用ClientId,ClientSecret/UserName,Password/Code 來換取Token,最後利用Token來訪問資源。
因此關鍵點就是抽象出了Token這個中間層來達到隔離、安全的效果。