Auth0.js

認証Auth0JavaScriptSPAOAuth2OpenID ConnectJWTブラウザ認証

Auth0.js

概要

Auth0.jsは、Auth0の認証サービスをJavaScriptアプリケーションに統合するための公式SDKです。2025年現在、Single Page Application(SPA)に最適化された認証機能を提供しています。OAuth2、OpenID Connect、PKCE(Proof Key for Code Exchange)をサポートし、Universal Login、Silent Authentication、Refresh Token Rotationなどの高度なセキュリティ機能を実装できます。React、Vue.js、Angular、Vanillaなど、様々なJavaScriptフレームワークで使用可能で、ブラウザ環境でのセキュアな認証を簡単に実現できます。

特徴

Auth0.js v9は、モダンなブラウザAPIを活用した包括的な認証ライブラリです。主な特徴として、Universal Loginによる認証フロー、Silent Authenticationによるシームレスなユーザー体験、PKCE対応によるSPA向けのセキュリティ強化を提供します。Google、Facebook、GitHub、LinkedInなどの外部認証プロバイダーとの統合も簡単で、JWT、Access Token、Refresh Tokenの管理も自動的に処理されます。さらに、React、Vue.js、Angularなどの主要フレームワークとの統合パターンも豊富に提供されています。

主な機能

  • Universal Login: Auth0ホストの認証画面による安全なログイン
  • PKCE対応: Single Page Application向けのセキュリティ強化
  • Silent Authentication: バックグラウンドでのトークン更新
  • 外部認証プロバイダー: Google、Facebook、GitHub、LinkedIn等
  • トークン管理: JWT、Access Token、Refresh Tokenの自動管理
  • フレームワーク統合: React、Vue.js、Angular等との連携

使用例

インストールと基本設定

npm install auth0-js

基本的な認証フロー

import auth0 from 'auth0-js';

// Auth0設定
const auth0Client = new auth0.WebAuth({
  domain: 'your-domain.auth0.com',
  clientID: 'your-client-id',
  redirectUri: window.location.origin + '/callback',
  responseType: 'token id_token',
  scope: 'openid profile email'
});

// ログイン
function login() {
  auth0Client.authorize();
}

// コールバック処理
function handleAuthentication() {
  auth0Client.parseHash((err, authResult) => {
    if (authResult && authResult.accessToken && authResult.idToken) {
      setSession(authResult);
    } else if (err) {
      console.error(err);
    }
  });
}

// セッション設定
function setSession(authResult) {
  localStorage.setItem('access_token', authResult.accessToken);
  localStorage.setItem('id_token', authResult.idToken);
  localStorage.setItem('expires_at', 
    JSON.stringify(authResult.expiresIn * 1000 + new Date().getTime())
  );
}

React統合

import React, { createContext, useContext, useEffect, useState } from 'react';

const AuthContext = createContext();

export const useAuth = () => useContext(AuthContext);

export function AuthProvider({ children }) {
  const [isAuthenticated, setIsAuthenticated] = useState(false);
  const [user, setUser] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    // 認証状態の初期化
    const initAuth = async () => {
      if (window.location.hash.includes('access_token')) {
        await handleAuthentication();
      }
      
      checkSession();
      setLoading(false);
    };

    initAuth();
  }, []);

  const login = () => {
    auth0Client.authorize();
  };

  const logout = () => {
    localStorage.removeItem('access_token');
    localStorage.removeItem('id_token');
    localStorage.removeItem('expires_at');
    
    auth0Client.logout({
      returnTo: window.location.origin
    });
  };

  return (
    <AuthContext.Provider value={{
      isAuthenticated,
      user,
      login,
      logout,
      loading
    }}>
      {children}
    </AuthContext.Provider>
  );
}

API認証

// 認証付きAPIリクエスト
async function authenticatedFetch(url, options = {}) {
  const token = localStorage.getItem('access_token');
  
  const response = await fetch(url, {
    ...options,
    headers: {
      ...options.headers,
      'Authorization': `Bearer ${token}`
    }
  });
  
  if (response.status === 401) {
    // トークンの更新
    await renewToken();
    return authenticatedFetch(url, options);
  }
  
  return response;
}

비교・代替手段

優位性

  • Auth0の包括的な機能と管理画面の活用
  • Universal Loginによる高いセキュリティ
  • 豊富な外部認証プロバイダーとの統合
  • 主要JavaScriptフレームワークとの統合

注意点

  • Auth0サービスへの依存とコスト
  • インターネット接続が必要
  • 設定の複雑さと学習コスト

類似ライブラリ比較

  • @auth0/auth0-spa-js: 新しいAuth0 SPA SDK
  • Firebase Authentication: Googleのマネージド認証サービス
  • Supabase Auth: オープンソースのBaaS認証サービス

学習リソース

公式ドキュメント

チュートリアル

まとめ

Auth0.jsは、JavaScriptアプリケーションに認証機能を統合するための強力なライブラリです。Universal Loginによる高いセキュリティ、豊富な外部認証プロバイダーとの統合、主要フレームワークとの連携により、現代的なSPAアプリケーションの認証要件を効率的に実現できます。Auth0サービスの利用料金は発生しますが、開発・運用の効率化と高度なセキュリティ機能を考慮すると、多くのJavaScriptプロジェクトで有効な選択肢となります。