chapter01

OAuth2.0とは?概要とOAuth2.0対応のAPIのご紹介と、データ連携を行う際のシステム構成パターンについて

目次

    前の章では、システム連携の重要性とOAuth2.0を活用したデータ同期バッチの基本的な考え方について概要を説明しました。今回は、OAuth2.0自体についてより詳しく解説し、この認証方式を採用しているSaaS製品のAPIをご紹介します。さらに、OAuth2.0を使用したデータ連携を行う際の実装パターンについても説明していきます。

    OAuth2.0とは?

    OAuth2.0(Open Authorization 2.0)は、サードパーティアプリケーションが限定的なアクセス権を取得するための業界標準のプロトコルです。このプロトコルにより、ユーザーは自身のパスワードを共有することなく、特定のリソースへのアクセスを許可することができます。

    OAuth2.0の主な特徴は以下の通りです:

    1. セキュリティ:ユーザーの認証情報を直接共有せずにアクセスを許可できる
    2. 柔軟性:様々なアプリケーションタイプ(Webアプリ、モバイルアプリ、デスクトップアプリなど)に対応
    3. スケーラビリティ:大規模なユーザーベースと多数のサードパーティアプリケーションをサポート

    SAMLとの比較

    SAML(Security Assertion Markup Language)も広く使用されている認証・認可プロトコルですが、OAuth2.0とは用途が異なります:

    • SAML:主にエンタープライズ環境での単一サインオン(SSO)に使用される
    • OAuth2.0:主にAPIアクセスの認可に使用される

    SAMLは主に組織内のアプリケーション間の認証の統合で使用されており、例として挙げられるのはSalesforce画面へのTableau画面の埋め込みの際に再ログインを不要にする仕組みです。SAMLについてはまた別の記事でのご紹介を予定しています。一方、OAuth2.0は外部アプリケーションとの連携に適しています。

    OAuth2.0対応のSaaS API実例

    多くの主要なSaaS製品がOAuth2.0をサポートしており、これによりサードパーティアプリケーションとの安全で効率的な連携が可能になっています。以下に、OAuth2.0に対応している代表的なSaaS製品のAPIをいくつか紹介します:

    1. Salesforce
    2. Snowflake
    3. Google BigQuery
    4. HubSpot
    5. freee会計
    6. 会計freee

    これらのAPIを利用することで、様々なビジネスプロセスの自動化やデータ統合が可能になります。例えば:

    • Salesforceの顧客や商談のデータをSnowflakeやBigQueryに連携させる
    • SnowflakeやBigQueryのデータをHubSpotのメール配信リストとして連携させる
    • Salesforceの商談のデータとfreee会計の財務データをDWHに連携して、売上実績と売上予測を同一のプラットフォームで確認できるようにする。

    OAuth2.0を使用したデータ連携の定型的な実装パターン

    OAuth 2.0の仕様に基づいて実装を行う際の“実装側”の主なメリットは、様々なSaaSサービス間で細部の仕様に違いがあるとしても、基本的な実装パターンが標準化されているため、開発者の学習負担が軽減される点です。この標準化により、異なるサービスに対しても類似のアプローチで実装できるため、効率的な開発が可能となります。一般的な実装の流れについては、以下の通りです。:

    1. Refresh Tokenの永続化
    2. バッチ実行時のAccess Token取得
    3. 取得したAccess Tokenを使用したAPIアクセス

    ①Refresh Tokenの永続化

    Refresh Tokenは一般的に長期間で有効なトークンで、新しいAccess Tokenを取得するために使用されます。このTokenを事前に永続化して使用することが一般的です。
    実際の運用ではよりセキュアな箇所に保存すべきですが、今回はサンプルとして、'dotenv' を使用しますので、.envファイルに認証情報を保存します。

    .env

    FREEE_TOKEN_URL=https://accounts.secure.freee.co.jp/public_api/token
    FREEE_REDIRECT_URI=urn:ietf:wg:oauth:2.0:oob
    FREEE_CLIENT_ID=<<ここにClient IDを保存してください>>
    FREEE_CLIENT_SECRET=<<ここにClient Secretを保存してください>>
    FREEE_REFRESH_TOKEN=<<ここにRefresh Tokenを保存してください>>

    ②バッチ実行時のAccess Token取得

    バッチ処理を実行する際に、保存されているRefresh Tokenを使用して新しいAccess Tokenを取得します。

        /**
         * リフレッシュトークン用のリクエストオプションを生成します
         * @returns {Object} - リクエストオプション
         */
        requestOptionRefreshToken() {
            return {
                method: 'POST',
                url: process.env.FREEE_TOKEN_URL,
                headers: { 'cache-control': 'no-cache', 'Content-Type': 'application/x-www-form-urlencoded' },
                form: {
                    grant_type: "refresh_token",
                    redirect_uri: process.env.FREEE_REDIRECT_URI,
                    client_id: process.env.FREEE_CLIENT_ID,
                    client_secret: process.env.FREEE_CLIENT_SECRET,
                    refresh_token: process.env.FREEE_REFRESH_TOKEN
                },
                json: true
            };
        }
    

    ③取得したAccess Tokenを使用したAPIアクセス

    新しく取得したAccess Tokenを使用して、目的のAPIにアクセスしデータを取得します。Access Tokenは一般的に有効期限があり、有効期限以降は使用できなくなるため、Access Tokenだけの保存では常時実行するバッチ処理には不十分です(Refresh Tokenを保存する必要があります)。

        /**
         * Freee APIにGETリクエストを送信します
         * @param {string} url - APIエンドポイント
         * @param {Object} [params] - オプションのクエリパラメータ
         * @returns {Promise<Object>} - APIレスポンス
         */
        async apiRequestGet(url, params) {
            try {
                const options = {
                    method: 'GET',
                    url: `${this.base_url}${url}`,
                    qs: {...params, access_token: this.access_token},
                    json: true
                };
                return await request(options);
            } catch (error) {
                console.error('APIリクエスト中にエラーが発生しました:', error);
                throw error;
            }
        }

    先程の記載のように、様々なSaaSサービス間で細部の仕様に違いがあるとしても、基本的な実装パターンはこの実装と同じになります。

    まとめと次回予告

    本章では、OAuth2.0の概要、主要なSaaS製品のOAuth2.0対応API、そしてOAuth2.0を使用したデータ連携の実装パターンについて解説しました。OAuth2.0は現代のWebサービス連携において不可欠な技術であり、その理解と適切な実装は効果的なシステム統合の鍵となります。

    次の章では、これらの知識を実際のユースケースに適用します。具体的には、会計freeeのAPIを使用して損益計算書(PL)と貸借対照表(BS)のデータを取得するバッチ処理のNode.jsによる実装例をご紹介します。実際のコードと共に、実装時の注意点やベストプラクティスについても詳しく解説していきます。

    【次章以降へはこちらから】

    一覧トップへ戻る