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这个中间层来达到隔离、安全的效果。