LoginSignup
6
6

More than 3 years have passed since last update.

yahoo-id.sh: Yahoo APIのアクセストークンを取得する開発ツール

Last updated at Posted at 2019-05-07

本稿は、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

実行例:

Hyper.png

ちなみに、アプリケーション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 する。
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6