/var/www/yatta47.log

/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

raindropでRefreshTokenからAccessTokenを取得する

最近raindropを使ってブックマーク関連を管理していますが、一つ問題が。

AccessTokenが2週間で切れる!!

これは仕様なのでしょうがないのですが、いつのまにか失敗しているケースが多いので、RefreshTokenからAccessTokenを取得する処理を追加しました。

ベースにしたサイト

そのへんの仕様については以下のページに記載してあります。

developer.raindrop.io

このページに沿って、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の認証、難しい。ちゃんと勉強したいなー。ではでは。