Работа с oauth2 в golang
За работу с методом авторизации oauth2 в golang отвечает пакет golang.org/x/oauth2
.
Создание объекта Config
Прежде всего нам необходимо создать объект конфигурации Oauth:
&oauth2.Config{
ClientID: "46197",
ClientSecret: "4759912abdd765ac1bba5f7d8ded0c112b3ee1ec",
RedirectURL: "http://localhost:8000/callback",
Endpoint: endpoints.Strava,
Scopes: []string{
"activity:read_all",
},
}
В пакете golang.org/x/oauth2/endpoints
можно найти эндопойнты для популярных сервисов.
Получение URL для авторизации
У этого объекта можно запросить сформированный URL по которому пользователь должен пройти чтобы выдать права на API:
oauthConf.AuthCodeURL("state")
Обработка callback’а
В handler’е который будет обрабатывать http://localhost:8000/callback
необходимо обменять код авторизации на токен:
func CallbackHandler(c *oauth2.Config) http.HandlerFunc {
return func(rw http.ResponseWriter, r *http.Request) {
token, _ := c.Exchange(r.Context(), r.URL.Query().Get("code"))
fmt.Println(token.AccessToken)
fmt.Println(token.RefreshToken)
Получение HTTP клиента
Полученный токен можно передать в метод Client исходного объекта
HTTPClient = c.Client(r.Context(), token)
так как объект токен содержит в себе и refresh token то его обновление пройдет автоматически. Этот клиент будет автоматически подставлять нужные headers в заголовки запросов.
Получение HTTP клиента из сохраненного токена
var t oauth2.Token
json.Unmarshal(store["s"], &t)
client := oauth2.NewClient(context.Background(), oauth2.StaticTokenSource(&t))