OAuth 2.0 是一个开放的标准协议,容许应用程序访问其它应用的用户受权的数据(如用户名、头像、昵称等)。好比使用微信、QQ、支付宝登陆等第三方网站,只须要用户点击受权按钮,第三方网站就会获取到用户在微信、QQ、支付宝的信息(固然信息都是不敏感数据如用户名、头像、昵称等),获取这些信息后,第三方网站就能够用这些信息建立一个第三方用户帐户,不须要再用户手动填写用户名、头像、昵称等......要想了解这个受权过程,咱们须要想了解什么是OAuth 2.0.api
在OAuth 2.0中"受权类型"指的是应用程序获取令牌的方式。OAuth 2.0定义了若干受权类型,有Authorization Code(受权码)、Implicit(隐式受权)、Password(密码受权)、Client Credentials(客户端凭证)、Device Code(设备代码)、Refresh Token(刷新令牌)。根据每种受权的应用场景选择不一样的受权。每种受权类型都针对特定用例进行了优化,不管是Web应用程序,本机应用程序,没法启动Web浏览器的设备或服务器到服务器应用程序。对于网站、手机app受权,如今用的最普遍的就是受权码受权。浏览器
受权码与其余受权类型不一样点是,它说先要求应用程序启动浏览器来开始流程。受权的大体流程以下:安全
首先应用程序须要构造一个URL,URL的结构以下:https://authorization-server.com/auth?response_type=code&client_id=29352915982374239857&redirect_uri=https%3A%2F%2Fexample-app.com%2Fcallback&scope=create+delete&state=xcoiv98y2kd22vusuye3kch
服务器
如豆瓣须要获取微信的受权信息,根据微信文档,拼接这个URL,会重定向到微信受权页面,当用户点击受权时,会返回到redirect_uri对应的值的网址,微信会在网址后面添加上code=CODE&state=STATE。code的值就是微信返回的信息,state是的值是应用程序以前传递的值。微信
应用程序须要接受返回的code。注意code有有效期,而且只能使用一次,微信认证为5分钟过时,支付宝为3分钟到24小时。app
获取access token应用程序须要经过POST请求并带着下面的参数请求受权服务器。优化
请求受权服务器后,服务器会返回网站
What is the OAuth 2.0 Authorization Code Grant Type?{ "access_token":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3", //咱们最终所须要的access token "token_type":"bearer", //令牌类型 "expires_in":3600, //access_token接口调用凭证超时时间,单位(秒) "refresh_token":"IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk", //当access token超时失效后,须要用refresh token来再次获取access token "scope":"create delete" //应用受权做用域 }
受权流程到此就结束了。
参考: