YahooID連携を試してみた-1

前回は、JWT(ジョット)というのを調べました。

JSON Web Token (JWT)について調べた

今回は実際にYahooID連携を使いJWTがどんな感じなのか見てみようと思います。

YhaooID連携は「OpenID Connect」という仕組みに基づいているようで、その仕組みの中でJWTが使われています。

YahooID連携の準備

最初にYahooID連携の準備が必要です。

https://developer.yahoo.co.jp/yconnect/v2/

利用ステップの「 3.Client IDを登録しましょう 」で連携するアプリケーションの情報を入力してください。

今回は、Webアプリ(PHP)で試してみようと思うので、アプリケーションの種類は「サーバーサイド」を選びました。

登録が完了すると画面にクライアントIDやシークレットが表示されます。こちらは重要なので第三者に知られないようにしましょう。

これでYahooID連携の準備はできたと思います。

ログイン画面を表示してみた

今回はWebアプリを作りYahooID連携をしてみます。

https://developer.yahoo.co.jp/yconnect/v2/authorization_code/

フロー図

まずは、 フロー図②のユーザー認証のリクエストの部分までを作ってみます。

<?php 
session_start();

// OpenID Configurationエンドポイントにリクエストして各エンドポイントのURIを取得
$open_id_conf_url = 'https://auth.login.yahoo.co.jp/yconnect/v2/.well-known/openid-configuration';
$open_id_conf = json_decode(file_get_contents($open_id_conf_url),true);

// ログイン画面のURL
$auth_endpoint_url = isset($open_id_conf['authorization_endpoint']) ? $open_id_conf['authorization_endpoint']:"";

// ログイン画面に渡す情報を作る
if ($auth_endpoint_url !== "") {
    // 発行されたクライアントID(YahooID連携の準備で取得したクライアントIDを設定)
    $client_id = "sample";

    // ログイン後のリダイレクト先(登録したURLを設定)
    $redirect_uri = "http://localhost/y_id_sample";

    // 取得したいユーザー情報
    $scope = ["openid","profile","email"];

    // stateに渡す値を生成する(セッションで保持する)
    $state = substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz'), 0, 12);
    $_SESSION['state'] = $state;
    
    $data = [
        "response_type" => "code",
        "client_id" => $client_id,
        "redirect_uri" => $redirect_uri,
        "scope" => implode(" ",$scope),
        "state" => $state
    ];
    $data = http_build_query($data, "", "&");

    $auth_endpoint_url = $auth_endpoint_url . "?". $data;
}

?>
<button onclick="location.href='<?= $auth_endpoint_url; ?>'">YahooID連携のログイン画面へ</button>

上記のlogin.phpにアクセスすると、YahooID連携のログイン画面に遷移するボタンが表示されます。

ボタンをクリックするとYahoo ID連携のログイン画面が表示され、認証が完了するとこちらのWebアプリにリダイレクトされます。

Yahoo ID連携のログイン画面には、client_idなどのリクエストパラメータを渡す必要があります。

必要なパラメータは以下に記載されています。

https://developer.yahoo.co.jp/yconnect/v2/authorization_code/authorization.html

これでログイン画面の表示はできると思います。

続きを書くと結構長くなりそうなので、今回はここまでにします。

次回はアクセストークンの取得やJWTの検証を書きたいと思います。