2009-05-26 12 views
2

ユーザーとパスワードの組み合わせを認証し、いくつかの異なるオペレーティングシステム間でグループの関連付けを検証する方法の推奨事項を探しています。基本的に私はMS Visual Studio C#とMono C#の両方で動作しているC#アプリケーションを持っており、Windows、Linux、MacOSXをサポートするために認証メカニズムを追加する必要があります。複数のOSユーザー認証手法のアプローチと推奨事項

Windowsの場合、WindowsのみのLogonUser APIを使用するためのクイックC#interopを作成しました。これは正常に動作していますが、Windows以外のシステムでは機能しません。私の最終的な目標は、すべてのプラットフォーム(Windows、Linux、MacOSX)で同じコードセットを実行し、可能な限りOSに依存しない#ifdefを設定することです。

注 - 私は必然的に、固有のOSユーザーアカウントを使用しようとしています。自分のユーザーアカウントストアを維持しない方がいいです。

アプローチやユーザー認証技術などについてのご意見やご提案は歓迎します。

+0

認証が必要な理由は何ですか?これはネットワーク対応のアプリケーションのためのものですか、あるいはあなたはローカルで作業していますか? – JimB

+0

私は、受信したメッセージで提供されているユーザー名とパスワードを確認する必要があるシステムで作業しています。ユーザーは特定のグループのメンバーです。これは、メッセージの残りの部分で要求された情報がその特定のユーザに対して許容可能かどうかを判断するために行われます。 私の問題は、Windows、Linux、MacOSXでこれを行う必要があることと、複数回書き込むことを望んでいることから始まります。 –

+0

私は謝罪し、私のポストをもう一度読んだ後、私は非常に明確ではないことに気付きました。私は、複数のオペレーティングシステム間で適切なユーザー認証メカニズムを判断する必要があります。さらに、私は未知のシステムに対処し、どの認証システム(LDAP、ローカル、ActiveDirectoryなど)を使用しているのか、そしてどのようにそれとインターフェースするのかを判断する必要があります。 –

答えて

1

私はLinuxとMacで認証がどのように機能するのか分かりませんが、私の頭に浮かぶのは、IAuthenticatorインターフェイスを実装し、OS固有の認証クラスを持つことです。 Dependecy Injectionを介して、あるいは実行時に動的に適切なクラスに手動で切り替えることができますが、どういうわけか、あなたのアプリケーションは現在実行中のOSを特定できるはずです。

+0

偉大なアイデアと私は反抗的にそのrecoに従います。 私の質問は、さまざまなオペレーティングシステムでのユーザー認証に使用できるメカニズムと、基本OSがどのように認証用に構成されているかを必ずしも知らなくても、ユーザーを認証するという問題にどのように取り組んでいるかに焦点が当てられました。たとえば、Windowsでは、LogonUser APIはローカルで、ActiveDirectoryではネットワーク経由でユーザーを認証しますが、LDAPでは認証しません。 他のユーザーは、複数のオペレーティングシステムと複数の認証メカニズムを介してユーザーの認証にどのようにアプローチしますか? –

0

各システムはローカル認証を別々に処理します。 @Darnellが述べたように、あなたの認証のためのインタフェースを作成し、システム特有のバックエンドを隠す必要があるでしょう。

複数のシステムで同じユーザーアカウントを使用する必要がある場合は、ユーザー情報用のldapと認証用のkerberosのみをサポートします。

あなたのアプリケーションを "kerberizing"するのに足りず、同等の環境でのみ動作すると主張しているため、普遍的な認証方法はありません。また、LDAPは実際にグループ情報を照会する唯一の移植可能な方法です。

よりシンプルな(移植性の高い)オプションは、ある種の事前共有キーを使用することがあります。このようにして、ユーザーはメッセージに署名するためのキーを与えることで、プログラムだけを認証します。ユーザーの対応するキーとメッセージを照合すると、a)ユーザーはローカルに存在し、b)ユーザーが許可したソースからメッセージが来ていることがわかります。ユニバーサル・グループ・ルックアップの問題はまだありますが、ldapに頼ることができない場合は、おそらくあなた自身でそれを行う必要があります。

注:私はまだ、私は強く、これは、独自のユーザー/パスワードデータベースを維持するためにあなたを必要とする場合であっても、これまで、メッセージングの誰かのパスワードを使用してないをお勧めします次

を強調しなければなりません。ローカルのセキュリティパラダイムを迂回し、システムをよりセキュリティ上のリスクにさらすことになります。これは、システムがkerberos/ActiveDirectoryを使用している場合にはさらに重要です。ユーザーのパスワードがでないことを確実にするために長い時間がかかっている場合は、がワイヤを介して送信されます。例としてDBMSを使用します - それらのほとんどは、ローカルユーザデータベースに(少なくともデフォルトでは)結びついておらず、独自のユーザ認証メカニズムを実装しています。 MySQLやPostgreSQLのセキュリティのしくみを見てください。

+0

私はあなたのポイントを見ることができますが、これが不適切な場合、これはシステムをより大きなセキュリティリスクまで開くことになりますが、私はこのアプローチがリモートログイン(VCN、RemoteDesktop、ssh)とは異なることはありません。私はどちらのアプローチ(システム認証とアプリケーション認証を使用する)によると、セキュリティに大きな影響を与える可能性があると思います。 [私はあなたに完全に同意していないが、話題についてもっと議論するつもりであることに注意してください。] BTWクライアントとサーバーの通信をSSLで暗号化しています。 –

+0

あなたのアプローチは他のシステムと似ていますが、私はあなたがそれを正しく行うことができないと言っているわけではありませんが、間違いが起きます。時にはそれを行う必要があり、sshは素晴らしい例です。違いは、コードに入った徹底的な監査です。これはあなたの実際の質問とは別の問題ですが、私はちょうど私の答えに気づいた新しいオプションを追加します。 – JimB

+0

私の心配は必ずしもメッセージのパスワードの送信(適切に暗号化されている場合)ではなく、送信側でのパスワードの保存です(ここであなたの意図を理解していない限り)。ユーザーが自分でパスワードを入力している場合は、それほど問題はありません。 – JimB

関連する問題