ホームページ >データベース >mysql チュートリアル >シングルサインオン機能を実装するために安全な MySQL テーブル構造を設計するにはどうすればよいですか?

シングルサインオン機能を実装するために安全な MySQL テーブル構造を設計するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-10-31 08:33:201478ブラウズ

シングルサインオン機能を実装するために安全な MySQL テーブル構造を設計するにはどうすればよいですか?

シングル サインオン機能を実装するために安全な MySQL テーブル構造を設計するにはどうすればよいですか?

インターネットの発展に伴い、ユーザーがさまざまなアプリケーションでさまざまなアカウントにログインする必要があることが一般的になってきました。ユーザー エクスペリエンスと利便性を向上させるために、シングル サインオン (SSO) テクノロジーが登場しました。 SSO テクノロジーを使用すると、ユーザーは 1 回のログインで複数のアプリケーションにアクセスできるため、アカウントとパスワードを頻繁に入力する手間が省けます。

シングル サインオン機能を実装するために安全な MySQL テーブル構造を設計する前に、SSO の基本原則を理解する必要があります。通常、SSO は、アイデンティティ プロバイダー (アイデンティティ プロバイダー、IdP と呼ばれる)、アプリケーション (サービス プロバイダー、SP と呼ばれる)、およびユーザーの 3 つの部分を通じて実装されます。ユーザーが初めてログインすると、ID プロバイダーはユーザーの ID 情報を確認し、ID トークン (トークン) を発行します。ユーザーが他のアプリケーションにアクセスすると、アプリケーションは ID プロバイダーを使用して ID トークンを検証します。検証が成功した場合、ユーザーは再度ログインする必要はありません。

次は、シングル サインオン機能を実装するための安全な MySQL テーブル構造を設計するためのサンプル コードです:

-- 创建用户表
CREATE TABLE users (
    id INT(11) NOT NULL AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY (username)
);

-- 创建令牌表
CREATE TABLE tokens (
    id INT(11) NOT NULL AUTO_INCREMENT,
    user_id INT(11) NOT NULL,
    token VARCHAR(255) NOT NULL,
    expiration DATETIME NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY (token),
    INDEX (user_id),
    FOREIGN KEY (user_id) REFERENCES users (id)
);

-- 创建应用程序表
CREATE TABLE applications (
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    api_key VARCHAR(255) NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY (api_key)
);

-- 创建用户与应用程序之间的关联表
CREATE TABLE users_applications (
    user_id INT(11) NOT NULL,
    application_id INT(11) NOT NULL,
    PRIMARY KEY (user_id, application_id),
    FOREIGN KEY (user_id) REFERENCES users (id),
    FOREIGN KEY (application_id) REFERENCES applications (id)
);

上記のサンプル コードでは、ユーザー (ユーザー テーブル)、トークン (トークン テーブル)、applications (アプリケーション テーブル)、および users_applications (ユーザーとアプリケーション間の関連付けテーブル)。

ユーザー テーブル (ユーザー) には、ユーザー名やパスワードなどのユーザーの基本情報が保存されます。パスワードは、bcrypt などの安全なハッシュ アルゴリズム暗号化方法を使用するなど、暗号化して保存する必要があります。

トークン テーブル (トークン) には、ユーザーの ID トークン情報が保存されます。ユーザーが正常にログインすると、トークンが生成され、ユーザーに関連付けられてトークン テーブルに保存されます。セキュリティを向上させるために、トークンには有効期限を設定する必要もあります。

アプリケーション テーブル (アプリケーション) には、アプリケーション名や API キーなど、SSO システムに接続されているアプリケーション情報が格納されます。

ユーザーとアプリケーション間の関連付けテーブル (users_applications) は、ユーザーとアプリケーション間の関係を確立するために使用されます。各ユーザーは複数のアプリケーションに関連付けることができ、ユーザーとアプリケーション間の関係はこのテーブルに保存されます。

上記の MySQL テーブル構造を使用してシングル サインオン機能を実装できます。具体的なプロセスは次のとおりです。

  1. ユーザーがログイン時にユーザー名とパスワードを入力した後ページでは、ユーザー名とパスワードがバックグラウンドに送信されます。
  2. バックグラウンドでユーザー テーブル (ユーザー) をクエリして、ユーザー名とパスワードが正しいことを確認します。
  3. 検証が成功すると、バックグラウンドでトークン (トークン) が生成され、ユーザーに関連付けられ、トークン テーブル (トークン) に格納され、フロント エンドにトークンが返されます。
  4. フロントエンドはトークンを Cookie または LocalStorage に保存し、その後のアクセス時にリクエストとともにアプリケーションに送信します。
  5. アプリケーションはリクエストを受信した後、トークン テーブル (トークン) からトークンの正当性と有効期限を検証します。
  6. 検証が成功した場合、ユーザーはアプリケーションへのアクセスが許可されます。そうでない場合、ユーザーは再度ログインする必要があります。

上記の MySQL テーブル構造とコード例を使用すると、安全なシングル サインオン システムを設計できます。同時に、セキュリティを向上させるために、HTTPS プロトコルを使用してデータを送信したり、アクセス制限を強化したりするなど、他のセキュリティ対策を講じる必要があります。

以上がシングルサインオン機能を実装するために安全な MySQL テーブル構造を設計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。