ここ数日間、私は API 認証 について学習してきました。いくつかの方法を試して小さなプロジェクトを作成した後、学んだことを共有するのは素晴らしいアイデアだと思いました。この投稿では以下について説明します:
始めましょう!
ほとんどの場合、プライベート API を誰にでも公開することは望ましくありません。認証は、承認されたユーザーまたはクライアントのみが API にアクセスできるようにするのに役立ちます。さらに、認証はリクエスト数の制限、ユーザーの追跡、機密データの保護にも役立ちます。
では、認証を必要としない API についてはどうでしょうか? レート制限を使用すると、ユーザーまたは IP が特定の時間枠内に実行できるリクエストの数を制限することで、ある程度のセキュリティを確保できます。これは、静的データを提供する場合、または強力な保護が必要ない場合に便利です。
ここで、API 認証の 3 つの主要なタイプ、基本認証、API キー認証、および トークンベースの認証について詳しく見ていきましょう。
基本認証には、各 API リクエストで Base64 でエンコードされた ユーザー名 と パスワード の送信が含まれます。実装は簡単ですが、リクエストごとに資格情報が渡されるため、あまり安全ではありません。
この例では Secrets API を使用しました。まず、次のデータを含む POST リクエストを送信してユーザーを登録しました:
{ "username": "arka", "password": "221855" }
登録に成功した後、Postman を使用してログインし、リクエスト ヘッダーでユーザー名とパスワードを送信しました。
GET https://secrets-api.appbrewery.com/all?page=1
これは、ユーザーが保存したシークレットのリストを返します。
Axios を使用して Node.js アプリに基本認証を実装する方法を次に示します。
// Basic authentication route app.get("/basicAuth", async (req, res) => { try { const result = await axios.get(API_URL + "/all?page=2", { auth: { username: myUsername, password: myPassword, }, }); res.render("index.ejs", { content: JSON.stringify(result.data) }); } catch (error) { res.status(404).send(error.message); } });
API キー認証では、リクエストごとに (ユーザー用に生成された) キーを渡すことで API へのアクセスが許可されます。このキーは、リクエストを行っているクライアントを追跡するために使用され、多くの場合、レート制限や請求に関連付けられます。
覚えておくべき重要な違い:
API キー認証を使用すると、通常は次のような API キーを取得します。
GET https://secrets-api.appbrewery.com/generate-api-key
API キーを受信したら、それを使用して承認されたリクエストを行うことができます。
GET https://secrets-api.appbrewery.com/filter?score=5&apiKey=generated-api-key
アプリに API キー認証を実装する方法は次のとおりです:
// API key route app.get("/apiKey", async (req, res) => { try { const result = await axios.get(API_URL + "/filter", { params: { score: 5, apiKey: myAPIKey, }, }); res.render("index.ejs", { content: JSON.stringify(result.data) }); } catch (error) { res.status(404).send(error.message); } });
トークンベースの認証は、他の方法よりも安全です。ユーザーは資格情報を使用してログインし、API プロバイダーはトークンを生成します。このトークンは、毎回ユーザー名とパスワードを渡す代わりに、後続のリクエストに使用されます。
この方法は OAuth で一般的に使用され、トークンは多くの場合、限られた期間のみ有効です。これは、別のアプリから Google カレンダーを使用する場合など、サードパーティ アプリがユーザーのデータを操作する必要がある場合に特に便利です。
まず、登録してトークンを取得しました:
POST https://secrets-api.appbrewery.com/get-auth-token { "username": "jackbauer", "password": "IAmTheBest" }
トークンを受け取ったら、それを今後のリクエストに使用しました。
GET https://secrets-api.appbrewery.com/secrets/1
ベアラー トークンを使用してアプリにトークンベースの認証を実装する方法は次のとおりです:
// Bearer token route const config = { headers: { Authorization: `Bearer ${myBearerToken}` }, }; app.get("/bearerToken", async (req, res) => { try { const result = await axios.get(API_URL + "/secrets/2", config); res.render("index.ejs", { content: JSON.stringify(result.data) }); } catch (error) { res.status(404).send(error.message); } });
学習のまとめとして、4 種類の API リクエスト (認証なし、基本認証、API キー、トークンベース) をすべて実装する小さな Web アプリを作成しました。このアプリには 4 つのボタンがあり、それぞれが異なる種類のリクエストをトリガーします。
アプリ内でルートとボタンを設定する方法の概要を以下に示します:
// No authentication route app.get("/noAuth", async (req, res) => { try { const result = await axios.get(API_URL + "/random"); res.render("index.ejs", { content: JSON.stringify(result.data) }); } catch (error) { res.status(404).send(error.message); } });
アプリの完全なコードは、GitHub リポジトリにあります。
このアプリは、API 認証の重要性と、Node.js 環境でリクエストを処理するために Axios を使用して API 認証を実装する方法を示します。
このプロジェクトに取り組んでいる間、Axios 経由でリクエストを送信する際、特に基本認証で問題が発生しました。いくつか調べた結果、私の混乱を解消する役立つ StackOverflow の投稿を見つけました。同様の問題に遭遇した場合は、必ずチェックしてください!
API を悪用から保護し、不正アクセスを制限するには、API 認証を理解することが不可欠です。基本認証、API キー、トークンベースの認証を実装することで、API を保護し、責任を持って使用されるようにすることができます。
重要なポイント:
この投稿がさまざまな種類の API 認証の理解に役立つことを願っています。ご質問やフィードバックがございましたら、以下のコメント欄にお気軽にお寄せください。コーディングを楽しんでください! ?
以上がAPI 認証の初心者ガイド: 基本から実装までの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。