公衆号“AI碼師”
什麼是oauth2.0?
oauth2.0是oauth1.0的更新版,但是它不相容oauth1.0。
oauth 是一個開放授權的标準;
OAuth認證是為了做到第三方應用在未擷取到使用者敏感資訊(如:賬号密碼、使用者PIN等)的情況下,能讓使用者授權予他來通路開放平台(主要通路平台中的資源伺服器Resource Server)中的資源接口。
什麼時候會用到它呢?
其實它的應用在生活中随處可見。就拿一個最常見的例子來說:
我們登陸app時,經常會看到app登陸入口提供了微信登入的入口,比如:

點選微信登入的時候,會跳到微信登入授權頁面
點選同意,app就會拿到我們的使用者資訊(昵稱,頭像)。
那麼它是怎麼拿到使用者資訊的呢?
原因是微信提供了oauth2.0 接口,實作了oauth2.0協定,使用者不需要在第三方app裡面使用微信的使用者名和密碼,而是直接使用微信授權,授權之後,微信就會給第三方app傳遞一個授權碼,第三方app拿着這個授權碼去換取目前使用者通路的token,最後拿着token就可以調用相應的微信接口(擷取昵稱和頭像的接口)。
當然,微信隻是用了oauth2.0中其中一種授權模式:授權碼模式。它是最安全和最完整的的授權模式。oauth2.0還有其它授權模式,這裡就不多講了,今天我們主要聊一聊如何實作授權碼模式。
oauth2.0 授權碼模式授權流程
現在有一個需求是這樣的:使用者想要使用AI碼師商城的賬号登入第三方app
直接上圖
代碼實作思路
- 1.提供一個authorize.do接口,用來配置設定授權碼,并校驗用戶端的appid和secert,及跳轉位址,校驗完成之後,再進行使用者名和密碼校驗,如果校驗通過,就将目前使用者資訊和code綁定,然後在回調位址中拼接code參數。
- 2.提供一個token.do接口,用來給使用者配置設定授權token,接收使用者傳入的code,找到對應的綁定關系,然後生成一個token與具體使用者綁定,最後将token和refreshtoken傳回給第三方。
- 3.再提供一個refreshtoken.do的接口,用來重新整理token的有效期,因為給使用者配置設定的token是有效期的,但是refresh_token的有效期比token的有效期要長,是以可以使用refresh_token來重新整理token有效期