oauth2

最后更新于:2022-04-02 02:47:01

[TOC] ## 概述 符合 oauth2 的 请求 ## 常用 oath2 | Path | Synopsis | | --- | --- | | [amazon](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/amazon) | Package amazon provides constants for using OAuth2 to access Amazon. | | [clientcredentials](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/clientcredentials) | Package clientcredentials implements the OAuth2.0 "client credentials" token flow, also known as the "two-legged OAuth 2.0". | | [endpoints](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/endpoints) | Package endpoints provides constants for using OAuth2 to access various services. | | [facebook](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/facebook) | Package facebook provides constants for using OAuth2 to access Facebook. | | [github](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/github) | Package github provides constants for using OAuth2 to access Github. | | [gitlab](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/gitlab) | Package gitlab provides constants for using OAuth2 to access GitLab. | | [google](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/google) | Package google provides support for making OAuth2 authorized and authenticated HTTP requests to Google APIs. | | [instagram](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/instagram) | Package instagram provides constants for using OAuth2 to access Instagram. | | [internal](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/internal) | Package internal contains support packages for oauth2 package. | | [jira](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/jira) | Package jira provides claims and JWT signing for OAuth2 to access JIRA/Confluence. | | [jws](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/jws) | Package jws provides a partial implementation of JSON Web Signature encoding and decoding. | | [jwt](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/jwt) | Package jwt implements the OAuth 2.0 JSON Web Token flow, commonly known as "two-legged OAuth 2.0". | | [linkedin](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/linkedin) | Package linkedin provides constants for using OAuth2 to access LinkedIn. | | [mailchimp](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/mailchimp) | Package mailchimp provides constants for using OAuth2 to access MailChimp. | | [mailru](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/mailru) | Package mailru provides constants for using OAuth2 to access Mail.Ru. | | [mediamath](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/mediamath) | Package mediamath provides constants for using OAuth2 to access MediaMath. | | [microsoft](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/microsoft) | Package microsoft provides constants for using OAuth2 to access Windows Live ID. | | [nokiahealth](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/nokiahealth) | Package nokiahealth provides constants for using OAuth2 to access the Nokia Health Mate API. | | [odnoklassniki](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/odnoklassniki) | Package odnoklassniki provides constants for using OAuth2 to access Odnoklassniki. | | [paypal](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/paypal) | Package paypal provides constants for using OAuth2 to access PayPal. | | [slack](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/slack) | Package slack provides constants for using OAuth2 to access Slack. | | [spotify](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/spotify) | Package spotify provides constants for using OAuth2 to access Spotify. | | [stackoverflow](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/stackoverflow) | Package stackoverflow provides constants for using OAuth2 to access Stack Overflow. | | [twitch](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/twitch) | Package twitch provides constants for using OAuth2 to access Twitch. | | [uber](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/uber) | Package uber provides constants for using OAuth2 to access Uber. | | [vk](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/vk) | Package vk provides constants for using OAuth2 to access VK.com. | | [yahoo](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/yahoo) | Package yahoo provides constants for using OAuth2 to access Yahoo. | | [yandex](https://pkg.go.dev/golang.org/x/oauth2@v0.0.0-20201208152858-08078c50e5b5/yandex) | Package yandex provides constants for using OAuth2 to access Yandex APIs. | ## 语法 ### Func ``` func NewClient(ctx context.Context, src TokenSource) *http.Client func RegisterBrokenAuthHeaderProvider(tokenURL string) ``` ### Type ``` type AuthCodeOption func SetAuthURLParam(key, value string) AuthCodeOption type AuthStyle type Config func (c *Config) AuthCodeURL(state string, opts ...AuthCodeOption) string func (c *Config) Client(ctx context.Context, t *Token) *http.Client func (c *Config) Exchange(ctx context.Context, code string, opts ...AuthCodeOption) (*Token, error) func (c *Config) PasswordCredentialsToken(ctx context.Context, username, password string) (*Token, error) func (c *Config) TokenSource(ctx context.Context, t *Token) TokenSource type Endpoint type RetrieveError func (r *RetrieveError) Error() string type Token func (t *Token) Extra(key string) interface{} func (t *Token) SetAuthHeader(r *http.Request) func (t *Token) Type() string func (t *Token) Valid() bool func (t *Token) WithExtra(extra interface{}) *Token type TokenSource func ReuseTokenSource(t *Token, src TokenSource) TokenSource func StaticTokenSource(t *Token) TokenSource type Transport func (t *Transport) CancelRequest(req *http.Request) func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) ``` ## 实例 ### CustomHTTP ``` package main import ( "context" "fmt" "golang.org/x/oauth2" "log" ) func main() { ctx := context.Background() conf := &oauth2.Config{ ClientID: "YOUR_CLIENT_ID", ClientSecret: "YOUR_CLIENT_SECRET", Scopes: []string{"SCOPE1", "SCOPE2"}, Endpoint: oauth2.Endpoint{ AuthURL: "https://provider.com/o/oauth2/auth", TokenURL: "https://provider.com/o/oauth2/token", }, } // Redirect user to consent page to ask for permission // for the scopes specified above. url := conf.AuthCodeURL("state", oauth2.AccessTypeOffline) fmt.Printf("Visit the URL for the auth dialog: %v", url) // Use the authorization code that is pushed to the redirect // URL. Exchange will do the handshake to retrieve the // initial access token. The HTTP Client returned by // conf.Client will refresh the token as necessary. var code string if _, err := fmt.Scan(&code); err != nil { log.Fatal(err) } tok, err := conf.Exchange(ctx, code) if err != nil { log.Fatal(err) } client := conf.Client(ctx, tok) client.Get("...") } ```
';