本稿は、Yahoo! ID連携API(v1)でYahoo APIのアクセストークンを取得するCLIツールである「yahoo-id.sh」を紹介する。
本稿で紹介するツールは、以前投稿したYahoo! ID連携(v1)でアクセストークンを取得する手順をHTTPだけで説明する - Qiitaに基づいて、Yahoo! ID連携(v1)でアクセストークン取得の手順を自動化したシェルスクリプトである。
このツールの用途は、開発者がYahoo APIを使ったアプリケーションの開発時に、マニュアルでアクセストークンを取得したいときに用いることを想定している。
yahoo-id.shの使い方
yahoo-id.sh
を実行し、表示されるガイダンスに従っていくと、アクセストークンとリフレッシュトークンが取れる。
./yahoo-id.sh
実行例:

ちなみに、アプリケーションID、シークレット、コールバックURLの入力を都度したくないときは、環境変数YAHOO_APPLICATION_ID
, YAHOO_SECRET
, YAHOO_CALLBACK_URL
を与えると、それらの入力をスキップできる:
YAHOO_APPLICATION_ID=aBcDeFgHiJkLmNoPqRsTuVwXyZ- \
YAHOO_SECRET= 1234567890abdef1234567890abdef \
YAHOO_CALLBACK_URL=https://example.com/ \
./yahoo-id.sh
yahoo-id.shのソースコード
yahoo-id.sh
# !/usr/bin/env bash
set -eu
function echo:bold {
echo -e "\033[1m$@\033[0m"
}
function echo:url {
echo -e "\033[04m\033[36m$@\033[0m"
}
function echo:red {
echo -e "\033[31m$@\033[0m"
}
function echo:green {
echo -e "\033[32m$@\033[0m"
}
: 'Declare variables by environment variables' && {
applicationId=${YAHOO_APPLICATION_ID:-}
secret=${YAHOO_SECRET:-}
callbackUrl=${YAHOO_CALLBACK_URL:-}
authorizationToken=${YAHOO_AUTHORIZATION_TOKEN:-}
accessToken=""
refreshToken=""
}
: 'Input the application information' && {
while [ "${applicationId}" = '' ] || [ "${secret}" = '' ] || [ "${callbackUrl}" = '' ]; do
echo:bold 'アプリケーションの管理からアプリケーションの詳細ページを開き、当該アプリケーションの情報を入力してください。'
echo:url ' https://e.developer.yahoo.co.jp/dashboard/'
echo ''
[ "${applicationId}" = '' ] && read -p 'アプリケーションID: ' applicationId
[ "${secret}" = '' ] && read -p 'シークレット: ' secret
[ "${callbackUrl}" = '' ] && read -p 'コールバックURL: ' callbackUrl
echo ''
done
}
: 'Declare Authorization header' && {
authorizationHeader="Basic $(echo -n "${applicationId}:${secret}" | base64)"
}
: 'Open auth page to get authorization token' && {
nonce=1
authUrl="https://auth.login.yahoo.co.jp/yconnect/v1/authorization?response_type=code+id_token&client_id=${applicationId}&redirect_uri=${callbackUrl}&scope=openid+profile&nonce=${nonce}"
echo:bold '下記のURLを開いてYahoo! JAPAN IDで認証してください。'
echo:url " ${authUrl}"
echo ''
}
: 'Input authorization token' && {
while [ "${authorizationToken}" = '' ]; do
echo:bold '認証後にリダイレクトされたURLの"code"パラメータの値を入力してください。'
echo:url ' http://example.com/?code=********'
echo:bold ' ^^^^^^^^この部分'
read -p 'code: ' authorizationToken
echo ''
done
}
: 'Get access token and refresh token' && {
: 'Fetch access token and refresh token' && {
echo:bold 'アクセストークンとリフレッシュトークンを取得します...'
echo ''
accessTokenFile=$(mktemp)
curl \
-H 'Content-Type:application/x-www-form-urlencoded' \
-H "Authorization:${authorizationHeader}" \
-d "grant_type=authorization_code&code=${authorizationToken}&redirect_uri=${callbackUrl}" \
https://auth.login.yahoo.co.jp/yconnect/v1/token > $accessTokenFile
echo ''
echo:bold "レスポンスを ${accessTokenFile} に保存しました。"
echo ''
}
: 'Parse JSON to set access token' && {
accessToken=$(cat accessTokenFile | php -r 'print(json_decode(fgets(STDIN))->access_token ?? "");')
[ "${accessToken}" = "" ] && {
echo:red 'アクセストークンが取得できませんでした。レスポンスがJSONでない可能性があります。'
exit 1
}
}
: 'Parse JSON to set refresh token' && {
refreshToken=$(cat accessTokenFile | php -r 'print(json_decode(fgets(STDIN))->refresh_token ?? "");')
[ "${refreshToken}" = "" ] && {
echo:red 'リフレッシュトークンが取得できませんでした。レスポンスがJSONでない可能性があります。'
exit 1
}
}
: 'Show the access token and the refresh token' && {
echo:bold '下記のアクセストークンとリフレッシュトークンを取得しました。'
echo ''
echo -e "$(echo:green アクセストークン:) ${accessToken}"
echo -e "$(echo:green リフレッシュトークン:) ${refreshToken}"
echo ''
}
}
インストール方法
- 上のソースコードを
yahoo-id.sh
として保存する。 -
chmod +x yahoo-id.sh
する。