最近raindropを使ってブックマーク関連を管理していますが、一つ問題が。
AccessTokenが2週間で切れる!!
これは仕様なのでしょうがないのですが、いつのまにか失敗しているケースが多いので、RefreshTokenからAccessTokenを取得する処理を追加しました。
ベースにしたサイト
そのへんの仕様については以下のページに記載してあります。
このページに沿って、RefreshTokenからAccessTokenを取得する方法を実装します。
コード
Go言語での実装。
func getAccessTokenFromRefreshToken(refreshToken string) (string, error) { params := url.Values{} params.Add("grant_type", "refresh_token") params.Add("refresh_token", refreshToken) params.Add("client_id", clientID) params.Add("client_secret", clientSecret) resp, err := http.PostForm(tokenURL, params) if err != nil { return "", err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return "", err } var tokenResponse struct { AccessToken string `json:"access_token"` TokenType string `json:"token_type"` ExpiresIn int `json:"expires_in"` RefreshToken string `json:"refresh_token"` } if err := json.Unmarshal(body, &tokenResponse); err != nil { return "", err } return tokenResponse.AccessToken, nil }
まとめ
AccessTokenが切れて401が返ってきた際にRefreshTokenを取得するように変更すればいいのかなーと思っています。
OAuth2の認証、難しい。ちゃんと勉強したいなー。ではでは。