クライアント/サーバーアプリケーションの認証およびセキュリティモデル
-
06-07-2019 - |
質問
クライアントにユーザー名とパスワードでログインする必要があるカスタムクライアント/サーバーアプリケーションを開発しています。ユーザーアカウントは、Windows / ADアカウントとは一切関係ありません。ログイン後、クライアントアプリケーションはサーバーシステムに他のサービスを要求します。
私の質問は、これを実装する最良の方法は何ですか?ここではどのようなアーキテクチャが最適ですか?何らかのチケット/トークン認証システムを実装する必要があると思います???
ありがとう
解決
実際には、「チケット」を渡すシステムを実装することができます。異なる部分(ログインサーバー、クライアント、アプリサーバー)の間。このチケットには、ユーザーID(ユーザー名、行IDなど)などの基本情報が含まれます。このチケットは、許可されたサーバーが共有する秘密鍵で暗号化されるか、サーバーが共有する秘密鍵でソルトされたチケットの内容のハッシュでスタンプされます。最初の方法では、承認されたサーバーのみがチケットを作成および読み取ることができ、2番目の方法では、承認されたサーバーのみが承認されたサーバーのみがチケットを作成できたが、誰でもチケットを読み取ることができることを確認できます。すべてのアプリサーバーは、保護する必要のあるアクションを実行する前に、チケットをチェックします(復号化を試みるか、ハッシュが一致することを確認します)。これがWebアプリの場合、Cookieはチケットを保存するのに適した場所です。
他のヒント
クライアント/サーバー以外のアーキテクチャについてはあまり説明していないので、VSのWindows Formsのようなフォームデザイナーを使用していると思います。これらの場合、簡単で、セットアップが簡単で、適度に安全であるため、常に何らかの形式のデータベーステーブル認証を使用しています。面倒なことなく、この方法でグループとロールを設定することもできます。
Table: Users
Fields: UserID PK
Login Text
Password Text
...
Table: Roles
Fields: RoleID PK
Role Text
...
Table: UserRoles
Fields: UserID FK
RoleID FK