生命不止,繼續 go go go!!!
今天繼續分享golang中的認證問題,之前寫過兩篇:
一篇是關於basic認證:Go實戰–透過basic認證的http(basic authentication)
一篇是關於JWT的:Go實戰–golang中使用JWT(JSON Web Token)
這裡就介紹一下golang中使用oauth2.0.
OAuth2.0OAuth2.0是OAuth協議的下一版本,但不向後相容OAuth 1.0即完全廢止了OAuth1.0。 OAuth 2.0關注客戶端開發者的簡易性。要麼透過組織在資源擁有者和HTTP服務商之間的被批准的互動動作代表使用者,要麼允許第三方應用代表使用者獲得訪問的許可權。同時為Web應用,桌面應用和手機,和起居室裝置提供專門的認證流程。2012年10月,OAuth 2.0協議正式釋出為RFC 6749.
在認證和授權的過程中涉及的三方包括:1、服務提供方,使用者使用服務提供方來儲存受保護的資源,如照片,影片,聯絡人列表。2、使用者,存放在服務提供方的受保護的資源的擁有者。3、客戶端,要訪問服務提供方資源的第三方應用,通常是網站,如提供照片列印服務的網站。在認證過程之前,客戶端要向服務提供者申請客戶端標識。
使用OAuth進行認證和授權的過程如下所示:
(A)使用者開啟客戶端以後,客戶端要求使用者給予授權。(B)使用者同意給予客戶端授權。(C)客戶端使用上一步獲得的授權,向認證伺服器申請令牌。(D)認證伺服器對客戶端進行認證以後,確認無誤,同意發放令牌。(E)客戶端使用令牌,向資源伺服器申請獲取資源。(F)資源伺服器確認令牌無誤,同意向客戶端開放資源
更詳細的內容,可以參考:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
package oauth2Package oauth2 provides support for making OAuth2 authorized and authenticated HTTP requests. It can additionally grant authorization with Bearer JWT.
獲取:
go get golang.org/x/oauth21
type Config
type Config struct { // ClientID is the application's ID. ClientID string // ClientSecret is the application's secret. ClientSecret string // Endpoint contains the resource server's token endpoint // URLs. These are constants specific to each server and are // often available via site-specific packages, such as // google.Endpoint or github.Endpoint. Endpoint Endpoint // RedirectURL is the URL to redirect users going through // the OAuth flow, after the resource owner's URLs. RedirectURL string // Scope specifies optional requested permissions. Scopes []string}1234567891011121314151617181920
func (*Config) AuthCodeURL
func (c *Config) AuthCodeURL(state string, opts ...AuthCodeOption) string1
AuthCodeURL returns a URL to OAuth 2.0 provider’s consent page that asks for permissions for the required scopes explicitly.
func (*Config) Exchange
func (c *Config) Exchange(ctx context.Context, code string) (*Token, error)1
Exchange converts an authorization code into a token.
type Endpoint
type Endpoint struct { AuthURL string TokenURL string}1234
Endpoint contains the OAuth 2.0 provider’s authorization and token endpoint URLs.
使用google賬號進行登陸驗證1.去Google Cloud Platform,建立一個專案
2.憑據,建立憑據,選擇OAuth客戶端ID
4.記錄下客戶端ID和客戶端金鑰
編碼
瀏覽器訪問:http://localhost:8000
結果:
Content: { "id": "114512230444013345330", "email": "[email protected]", "verified_email": true, "name": "王書博", "given_name": "書博", "family_name": "王", "picture": "https://lh3.googleusercontent.com/-XdUIqdMkCWA/AAAAAAAAAAI/AAAAAAAAAAA/4252rscbv5M/photo.jpg", "locale": "zh-CN"}1234567891011