curlでアプリケーション登録をすると error invalid_grant が出てアクセストークンが取得できない


#1

自分のスキルなど

  • curlは日常的には使わず、ほぼ調べて出てきたものをコピー&ペーストする程度
  • OAuthについては全然わからない

環境

  • macOS 10.13
  • Mastodon v2.4.0 rc-1
  • zsh

実現したいこと

ターミナルからcurlを使ってアプリケーション登録, 認証, アクセストークンを取得したい

実行手順

1. client idclient secret の取得

$ MASTODON_HOST=mstdn.mimikun.jp
$ CLIENT_NAME=testcurlapp
$ curl -X POST -sS "https://${MASTODON_HOST}/api/v1/apps" -d "client_name=${CLIENT_NAME}" -d "redirect_uris=urn:ietf:wg:oauth:2.0:oob" -d "scopes=read write follow"

するとこういうのが出てくる。

{"id":"72","name":"testcurlapp","website":null,"redirect_uri":"urn:ietf:wg:oauth:2.0:oob","client_id":"CLIENT_ID","client_secret":"CLIENT_SECRET"}%

2. authorization code 取得

CLIENT_ID=前項で撮ってきたclient_id
CLIENT_SECRET=前項で撮ってきたclient_secret
open -a "Google Chrome" "https://${MASTODON_HOST}/oauth/authorize?client_id=${CLIENT_ID}&response_type=code&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=read%20write%20follow"

ブラウザが開くので(この場合はChrome)、承認する。

するとauthorization code が出て来るのでコピーし、環境変数AUTH_CODEに入れておく。

3. access token 取得

AUTH_TOKEN=ブラウザに表示されていたauthorization_code
curl -X POST -sS "https://${MASTODON_HOST}/oauth/token" -d "grant_type=authorization_code" -d "redirect_uri=urn:ietf:wg:oauth:2.0:oob" -d "client_id=${CLIENT_ID}" -d "client_secret=${CLIENT_SECRET}" -d "code=${AUTH_CODE}"

するとinvalid_grantエラーが出てくる。

{"error":"invalid_grant","error_description":"指定された認証許可は無効であるか、期限切れ、取り消されている、リダイレクトURIの不一致、または別のクライアントに発行されています。"}%

期待する結果

invalid_grantを始めとしたエラーが出ず、アクセストークンを取得できる

他に行ったこと

  • mstdn.jpで同様の手順で行った。この場合は期待する結果になった。

#2

同じようにやって上手く行かないので悩んでいましたが、分かりました。
3. access token 取得 のところで、AUTH_TOKENにauthorization_codeを入れていますが、
次行のcurl呼び出しではAUTH_CODEを参照してしまっています。


#3

修正しましたがまだエラーが出ています…

これはもうWebからアプリケーションを登録してアクセストークンを入手するしかないでしょうか?


#4

色々修正して試してみましたが、
ちゃんと動く v2.3.3
エラーになる v2.4.0 rc-1
という感じっぽいです。
コミットログとか見てみたのですが、APIにも変更は入っているものの、影響しそうなものが見つけられないんですよね。


#5

コミット入りましたが、結局コレですかね……。