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