web-dev-qa-db-ja.com

WinFormsでユーザーを認証します(ASP.Netとは関係ありません)

元々-StackOverflowに投稿 、SOコメントで提案されているように、ここにクロスポストされています。

イントロ

ファイルの読み込み/保存、チェックボックスのクリックなど、アプリケーションの一部のアクションをパスワードで保護する必要があります。これは、企業ネットワークのWindows 7で実行される標準のC#.Net 4.0、WinFormsアプリケーションです。

私は自分の非常に基本的なシステム(大きく開いたバックドアで難読化を読む)をユーザー/パスワード/権限(ハッシュとソルト)のテキストファイルでロールしようとしていましたが、検索した後、 非常に単純なアプローチ ですが、ASP.NETについてではないロールに関する優れたチュートリアルを見つけるのに苦労しています。

質問

それで、私に次の方法を示す1つ以上のチュートリアルを知っている人はいますか?

  1. Windowsユーザー/グループを作成し、そのユーザー/グループにRoleまたは権限を付与します。
    • 私はこれを会社のネットワークラップトップからテストしていますが、顧客の企業ネットワークに展開することに注意してください(これが問題であるかどうか、またはこれがどれほど難しいかはわかりません)。
  2. 認証されている場合は「HelloWorld」を出力し、認証されていない場合は例外をスローする単一のメソッドを使用して、winforms/console appサンプルを作成しますか?
  3. 私はネットワーク管理者や関連することをしたことがなく、ActiveDirectoryとローカルユーザーとネットワークユーザーについて読み続けています...Interfaceに構築して、Windowsに現在のユーザーには権限[〜#〜] abc [〜#〜]があり、Windowsがそれをどのように理解したかについてはあまり気にしません。次に、Local/Network/ActiveDirectory/etcごとに具体的な実装を作成できます。必要に応じてユースケース(またはifが必要です...今はそれさえ知らないので)。

バックグラウンド

- read if interested, but not required to answer question

ここで正しい方向に進んでいることを確認するために、基本的には、開発PCでこれをテストして、顧客にとって優れたエンドユーザーエクスペリエンスが得られることを確認する必要があります。問題は、現在、彼らが私のアプリケーションを実行する各コンピューターに対して自動ログインスクリプトを実行しており、1日を通して私のアプリケーションを使用するいくつかの異なるオペレーターがいることです。顧客は私のアプリの特定の機能でパスワード保護を望んでおり、それを特定のオペレーターにのみ提供しています。しばらくの間リクエストを予想していたので、これをうまく適合させることができます。これまで認証をプログラムしたことがありません。

誰かを解雇したり、権限を変更したりする必要がある場合に備えて、各オペレーターに独自のネットワークアカウントを与え、そのオペレーターまたはグループに必要な権限を割り当てるように顧客を説得することは価値があると思います。彼らと彼らはそれらの許可をグループ化することができますが、内部の企業ポリシーに基づいて適切と思われますが、私は本当に心配する必要はありません(ただし、IT部門はほとんど何も知らないので、自分でロールする必要がある場合はそうなります)私のアプリケーション)。

また、パスワードのハッシュや暗号化などを行う必要がなく、このボタンまたはそのボタンをクリックするために必要な役割を処理するだけで、私の生活がはるかに楽になります。

1
HodlDwon

.NETベースのアプリケーションで承認を行う現在の「ベストプラクティス」の方法が何であるかわかりません。これは、何年も前に、すべての認証機能をオペレーティングシステム自体にオフロードするために作成したWebベースのアプリケーションで行ったことです。 (これはおそらく、最初にシステム管理者で、次に開発者である誰かによって書かれた危険なハックとして外れるでしょう。)

  • アプリケーションのすべてのアクセス許可を列挙し、ディレクトリ階層にファイルを作成して、適切な役割に割り当てられたユーザーが選択的に利用できるようにしました。 (ファイルには何も含まれていませんでした。以下に示すように、ユーザーがファイルを読み取れることを確認しました。)

  • アプリケーションのユーザーロールを識別するActiveDirectoryグループを作成しました。

  • 前の手順で作成したファイルを読み取るためのアクセス許可をActiveDirectoryグループに割り当てました。

ユーザーがアプリケーション(Webベース)に対して認証されると、各「許可」ファイルにアクセスしようとしました。どの成功/失敗に基づいて、アプリケーションはユーザーに割り当てられた「ロール」を確認できます。

お客様のIT部門にとって、アプリケーションへのアクセス許可を変更するには、「アクセス許可」ファイルのACLを変更するか(根本的な変更が必要な場合)、多くの場合、ユーザーグループのメンバーシップを変更するだけでした。

ネストされたグループメンバーシップ、外部フォレストからのセキュリティプリンシパルなど、すべての「エッジケース」を非常にうまく処理できるため、この方法が気に入りました。これらのアクセス許可ファイルがWindows Server 2012マシンに再配置された場合、私のアプリケーションも便利です。突然、新しい動的アクセス制御機能を「無料」で利用できるようになりました。

1
Evan Anderson