🗝️
Ruby での Box API OAuth 2.0 refresh token 取得
これはなに?
- 📦 Box API OAuth 2.0 での refresh token 取得
- 💎 ↑の公式ドキュメントに Ruby のサンプルコードがなかったので備忘録代わり
-
oauth2
gem を使ってます https://github.com/oauth-xx/oauth2
-
手順
app 追加
- まずアプリを追加する
- 追加したら認証に↓を利用する
client id
client secret
- リダイレクト URL に以下を設定する
http://localhost:8080/oauth2/callback
authorization code の取得
require 'oauth2'
client = OAuth2::Client.new(
"", # client_id
"", # client_secret
site: "https://account.box.com",
)
client.options[:authorize_url] = "/api/oauth2/authorize"
client.options[:token_url] = "api/oauth2/token"
client.auth_code.authorize_url(
redirect_uri: "http://localhost:8080/oauth2/callback",
)
↑を実行すると認証用の URL が返ってくるのでブラウザで開く
=> "https://account.box.com/api/oauth2/authorize?client_id=XXXXX&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Foauth2%2Fcallback&response_type=code"
認証画面が表示されるのでボタンを押す。
URL 欄に authorization code が返ってくる。
http://localhost:8080/oauth2/callback?code=XXXXX
refresh token 取得
client.auth_code.get_token(
"", # authorization code
redirect_uri: "http://localhost:8080/oauth2/callback",
).refresh_token
↑を実行すると refresh token が取得できる。
=> "XXXXX"
Discussion
Authorization URL を生成する際には state パラメータを利用してCSRF対策をしましょう。 https://developer.box.com/reference/get-authorize/ (ドキュメントではoptionalですが他の手段を使わない限りは脆弱です)
OAuth における CSRF についてはこちらをどうぞ。 https://www.atmarkit.co.jp/ait/articles/1710/24/news011_2.html