ユーザー認証と認可
安全なログインシステムを実装し、さまざまな機能やデータへのユーザーアクセスを制御します
「ユーザー認証と認可」はCoddyKit上の無料AI SaaS Builderレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI SaaS Builder学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI SaaS Builderコースには全4レッスンが含まれています。
安全なアクセスへようこそ
このレッスンでは、ユーザー認証と認可について詳しく学びます。適切なユーザーだけが適切な機能にアクセスできるようにするため、特にAI SaaSを含む安全なアプリケーションには欠かせません。
限定されたAIクラブの用心棒と招待者リストをイメージしてください。
本人確認
認証(AuthN)とは、ユーザーの身元を確認するプロセスです。これは「あなたは本当に名乗っている本人ですか」という問いに答えるものです。
- ユーザー名/パスワード: 最も一般的な方法です。
- OAuth: GoogleやFacebookなどのアカウントでログインします。
- 生体認証: 指紋認証や顔認証です。
認証が完了すると、システムはユーザーが誰なのかを把握できます。
何が許可されていますか
認可(AuthZ)は、認証されたユーザーが何を実行またはアクセスできるかを決定します。これは「あなたが誰か分かったところで、どのような権限がありますか」という問いに答えるものです。
たとえば、管理者ユーザーはすべての設定にアクセスできますが、一般ユーザーは自分のデータだけを閲覧できます。
パスワードを安全に保管する
ユーザーのパスワードを平文で保存してはいけません。代わりに、ハッシュ化と呼ばれる一方向の暗号学的関数を使用します。ハッシュ化によって、パスワードは固定長の文字列に変換されます。
データベースが侵害されても、攻撃者が入手できるのは実際のパスワードではなく、そのハッシュだけです。ハッシュから元のパスワードを復元することはできません。
ハッシュ化を実際に試す
これは、パスワードをハッシュ化する方法を示す簡略化したJavaの例です。実際のアプリケーションでは、bcryptやArgon2などのより堅牢なアルゴリズムを使用し、セキュリティをさらに高めるために「ソルト」を追加することがよくあります。
この例を実行してみましょう。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
String password = "mySecretPassword123";
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] encodedhash = digest.digest(
password.getBytes(StandardCharsets.UTF_8));
StringBuilder hexString = new StringBuilder(2 * encodedhash.length);
for (int i = 0; i < encodedhash.length; i++) {
String hex = Integer.toHexString(0xff & encodedhash[i]);
if(hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
System.out.println("Original: " + password);
System.out.println("Hashed: " + hexString.toString());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}従来のセッション
多くのWebアプリケーションでは、セッションベース認証が使用されています。ユーザーがログインすると、サーバーは一意のセッションIDを作成して(多くの場合はデータベースに)保存し、それをCookieとしてクライアントに送信します。
以降のリクエストでは、クライアントがセッションIDを送信し、サーバーがそれを検証します。この方法では、状態をサーバー側で管理します。
JWTの概要
スケーラブルなAPI、特にマイクロサービスでは、JSON Web Token(JWT)がよく使われます。JWTはステートレスであるため、サーバーがセッション情報を保存する必要はありません。
JWTにはユーザーに関する情報(クレーム)が含まれ、サーバーによって署名されてクライアントに送信されます。クライアントはすべてのリクエストにJWTを含めます。
JWTの構造
JWTは、ドットで区切られた3つの部分で構成されます。
- Header: トークンの種類(JWT)と署名アルゴリズム(例: HS256)です。
- Payload: ユーザーID、ロール、有効期限などの「クレーム」が含まれます。
- Signature: トークンが改ざんされていないことを検証するために使用します。Header、Payload、秘密鍵を使って作成されます。
Signatureはセキュリティにおいて重要な役割を果たします。
RBACによるアクセス管理
ロールベースアクセス制御(RBAC)は、一般的な認可モデルです。ユーザーにロール(例: 「admin」「editor」「viewer」)を割り当て、ロールに特定の操作を実行する権限を付与します。
- Admin: あらゆるデータの作成、読み取り、更新、削除ができます。
- Editor: 自分のデータを作成、更新できます。
- Viewer: データの読み取りだけができます。
これにより、多数のユーザーの権限を簡単に管理できます。
APIの認可ロジック
バックエンドでは、ユーザーの認証後に、特定のAPIエンドポイントへのアクセス権を確認します。通常は、次の処理を行うミドルウェアやインターセプターを使用します。
- JWTまたはセッションからユーザーのロール/権限を取り出します。
- ユーザーのロールに、要求された操作の権限があるか確認します。
- 権限がなければアクセスを拒否します(例: 403 Forbiddenエラーを返します)。
確認してみましょう
AI SaaSでプレミアム機能にアクセスしようとしているユーザーについて考えてみましょう。
バックエンドを保護する
よくできました。これで、ユーザー認証と認可の基本概念を学びました。
- 認証: ユーザーが「誰であるか」を確認します。
- 認可: ユーザーが「何をできるか」を決定します。
- 安全なパスワードハッシュ化、セッションベース認証とステートレスなJWT認証の違い、権限管理のためのRBACについて学びました。
これらを正しく実装することは、安全でスケーラブルなAI SaaSバックエンドを構築するうえで不可欠です。
よくある質問
「ユーザー認証と認可」レッスンは無料ですか?
はい。「ユーザー認証と認可」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI SaaS Builderコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI SaaS Builderコースには全4レッスンが含まれています。
「ユーザー認証と認可」で何を学びますか?
安全なログインシステムを実装し、さまざまな機能やデータへのユーザーアクセスを制御します ブラウザで直接実行するハンズオンコードでAI SaaS Builderを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI SaaS Builderを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI SaaS Builderは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ユーザー認証と認可」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI SaaS Builderレッスンでコードを書いて実行できますか?
はい。すべてのAI SaaS Builderレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。