LoginSignup
9
5

More than 3 years have passed since last update.

Yahoo! ID連携(v1)でアクセストークンを取得する手順をHTTPだけで説明する

Last updated at Posted at 2019-04-17

本稿ではYahoo! ID連携(v1)でアクセストークンを取得する手順をHTTPだけで説明する。

前提条件

Authに必要な情報を用意しておく。

アプリケーションの管理からアプリケーションの詳細ページを開き、下記の情報を控えておく。

  • アプリケーションID
  • シークレット
  • コールバックURL

アプリケーションの詳細ページ:

Developers__39__Store:アプリケーションの管理:Yahoo_デベロッパーネットワーク.png

ユーザー認可リクエスト(認可トークンを取得する)

次のようなHTTPリクエストを送ると

リクエスト
GET /yconnect/v1/authorization?response_type=code+id_token&client_id=${アプリケーションID}&redirect_uri=${コールバックURL}&nonce=${適当な数字} HTTP/1.1
Host: auth.login.yahoo.co.jp
Accept: */*
Connection: keep-alive

次のようなレスポンスが帰ってくる。

レスポンス
HTTP/1.1 302 Found
Age: 0
Cache-Control: no-cache, no-store, must-revalidate, private
Connection: close
Content-Length: 0
Content-Type: text/html; charset=EUC-JP
Date: Wed, 17 Apr 2019 09:17:51 GMT
Location: https://login.yahoo.co.jp/config/login_verify2?.src=oauth&.display=&ckey=${アプリケーションID}&.done=https%3A%2F%2Fauth.login.yahoo.co.jp%2Fyconnect%2Fv1%2Fauthorization%3Ftoken%3Dxxxxxxx%26from_login%3D1%26.scrumb%3D0%26display%3D&auth_lv=pin
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Server: ATS

このLocationヘッダにあるURLをブラウザで開くと、アプリへの情報提供同意画面が表示される。

同意画面_-_Yahoo__JAPAN.png

同意すると、http://コールバックURL?code=XXXXX&state=にリダイレクトされる。このcodeパラメータの値が認可トークンと呼ばれるものになる。

詳細: Yahoo! ID連携:Authorizationエンドポイント - Yahoo!デベロッパーネットワーク

アクセストークン要求(アクセストークンを取得する)

Basic認証の情報を用意する。下記のコードで計算しておく。(HTTPだけで説明すると言ったが下はPHPコード)

$Basic認証の情報 = base64_encode($アプリケーションID . ':' . $シークレット);

アクセストークンを取得するために、次のようなHTTPリクエストを送る。認可トークンは上のステップで取得したもの。

リクエスト
POST /yconnect/v1/token HTTP/1.1
Host: auth.login.yahoo.co.jp
Accept: */*
Authorization: Basic {$上で計算したBasic認証の情報}
Content-Type: application/x-www-form-urlencoded; charset=utf-8

grant_type=authorization_code&code={$認可トークン}&redirect_uri=${コールバックURL}

次のようなレスポンスが帰ってくる。

レスポンス
HTTP/1.1 200 OK
Age: 0
Cache-Control: no-cache, no-store, must-revalidate, private
Cache-Control: no-store, private
Connection: close
Content-Encoding: gzip
Content-Length: ????
Content-Type: application/json;charset=UTF-8
Date: Wed, 17 Apr 2019 09:18:09 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Pragma: no-cache
Server: ATS
Vary: Accept-Encoding

{
    "access_token": "アクセストークン(めっちゃ長い)",
    "expires_in": "3600",
    "id_token": "IDトークン(そこそこ長い)",
    "refresh_token": "リフレッシュトークン(そんなに長くない)",
    "token_type": "bearer"
}

ボディにあるaccess_tokenアクセストークンになる。

詳細: Yahoo! ID連携:Tokenエンドポイント - Yahoo!デベロッパーネットワーク

関連

9
5
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
9
5