はじめに
Yahooが、ID連携のサービスを出してる。v1とv2があるようだが、最新版のv2を利用してみる。
この記事では、OpenID Connectのクライアント側をCurlで簡単に疑似体験するための手順を記載する。
注意として、OpenID Connectの手順をかなり省略してる。(OpenID Connectに準拠できていない。)OpenID Conncetについては、下記を参照。
http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html
Yahoo! ID連携 v2を利用するための準備
上のYahooのURLから、Client IDの登録まで行う。
認可リクエストを送り、認可コードを取得
Authorizationエンドポイントの仕様(v2仕様)は下記のとおり。
ブラウザで認可リクエストを送る。
※redirect_uriは、%エンコードしてる。
※tateとnonceは任意パラメータだったが、つけてみた。
https://auth.login.yahoo.co.jp/yconnect/v2/authorization?response_type=code&client_id=<クライアントID>&redirect_uri=
https%3A%2F%2Fdeveloper.yahoo.co.jp%2Fstart%2F&state=xyz&scope=openid+profile&nonce=abc
認証/認可をすると、リダレクトURLのサイトにアクセスして、URLを見ると認可レスポンスが返ってる。
https://developer.yahoo.co.jp/start/?state=xyz&code=100Vp1mp
トークンリクエストを送り、トークンを取得
Tokenエンドポイントのv2仕様は下記のとおり。
v2では、GETではなく、POSTでリクエストを送る必要がありそう。
Authorizationヘッダに、Clinet ID, Client Secretをコロンでつなぎ、Base64エンコードした文字列を指定する。
下記のコマンドで、その文字列を事前に作成しておく。
echo -n "{client_id}:{client_secret}" | base64
下記のリクエストを送り、トークン(access_token、refresh_token、id_token)を取得する。
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Authorization: Basic <client_id:client secret をbase64した値>' \
-d 'grant_type=authorization_code&code=100Vp1mp&redirect_uri=https%3A%2F%2Fdeveloper.yahoo.co.jp%2Fstart%2F' \
https://auth.login.yahoo.co.jp/yconnect/v2/token
下記のようなレスポンスが返ってくる。
{
"access_token":"アクセストークン",
"token_type":"Bearer",
"expires_in":3600,
"id_token":"IDトークン",
"refresh_token":"リフレッシュトークン"
}
Web APIアクセス(属性情報取得)
トークンが返ってきたら、ID Token検証の手順がありますが、それは今回スキップします。
下記の仕様から、属性情報を取得します。
下記のリクエストを送る。
curl -H 'Authorization: Bearer アクセストークン' \
https://userinfo.yahooapis.jp/yconnect/v2/attribute
下記の様なレスポンスが返ってくる。
{
"sub":"H5TX5WAAZEQHLO2WPOW2ECDAGE",
"locale":"ja-JP",
"birthdate":"xxxx",
"zoneinfo":"Asia\/Tokyo",
"nickname":"xxx",
"picture":"xxx"
}