2
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.

PHP-JWTライブラリを用いてAuth0のWEBアプリケーションを作成する

Last updated at Posted at 2021-08-15

#まず、Auth0無料登録を行い、Applicationを作成する(この記事ではhasami.jp.auth0.com)
FireShot Capture 001 - Application Details - manage.auth0.com.png
FireShot Capture 002 - Application Details - manage.auth0.com.png

#ログイン(authorization-code-flow)
http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html#AuthRequest

##AUTHORIZEエンドポイントへGETリクエストすることでログイン画面へ遷移
https://auth0.com/docs/api/authentication#authorization-code-flow

##GET "https://hasami.jp.auth0.com/authorize?client_id=DJjstTQAtZsX2mF1WucvC0925YTrNDol&response_type=code&scope=openid+email+profile&redirect_uri=https%3A%2F%2Fmail.hasami.uk%2Fcallback%2F"
(これがログインボタンのリンクになる)

  • response_type = code
  • client_id = DJjstTQAtZsX2mF1WucvC0925YTrNDol(Auth0のApplicationsの設定で取得できます)
  • scope = openid profile email
  • redirect_uri = https://mail.hasami.uk/callback/

##ログイン画面でログイン成功ときに得られるコールバック画面に付与されるGETパラメータ(code)をトークンに変換する
https://auth0.com/docs/api/authentication#authorization-code-flow45
http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html#TokenRequest
##POST "https://hasami.jp.auth0.com/oauth/token"

  • client_id
  • client_secret
  • grant_type = authorization_code
  • code = コールバックページ(/callback/)のGETパラメータ
  • redirect_uri = authorizeで投げたものと同じものを指定するhttps://mail.hasami.uk/callback/

##PHP-JWTライブラリでAuth0のユニバーサルログイン画面からの戻りで得られるIDトークンを検証(デコード)する

Auth0 が公開しているPHP-SDKはPHP7でないといけない。(https://auth0.com/docs/libraries/auth0-php)
PHP-JWT(firebase)であればPHP5から8まで対応している!
インストールは

composer require firebase/php-jwt

デコードに必要なPEMキー($publicKey)は テナントのURL/pem で手に入れられる(https://hasami.jp.auth0.com/pem)

use Firebase\JWT\JWT;
require_once("vendor/autoload.php");
try{
    $publicKey = file_get_contents("/usr/share/php/rs256.pem");
    #$decoded_ac = JWT::decode($token["access_token"], $publicKey, array('RS256'));
    //Auth0では、AUTHORIZEエンドポイントにaudienceを指定しなかったら(初期状態)JWT形式ではない(opaque)アクセストークンが返ってくるのでデコードしないこと
    //https://auth0.com/docs/tokens/access-tokens#opaque-access-tokens
    //https://auth0.com/docs/tokens/access-tokens#jwt-access-tokens
    $decoded_id = JWT::decode($token["id_token"], $publicKey, array('RS256'));
}catch(Exception $e){
    //検証できなければログイン失敗
}

2
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
2
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?