3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[OpenID Connect]Yahoo! ID連携 v2とCurlを使って、ID連携お試し。

Last updated at Posted at 2021-04-08

はじめに

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の登録まで行う。

image.png

image.png

認可リクエストを送り、認可コードを取得

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"
}
3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?