2011-11-08 6 views
3

私は次のことを達成しようとしています。Active Directoryに対する私のasp.net Webアプリケーションのアクティブなディレクトリのグループに基づいてアクセス許可を与える方法はありますか?

  1. 認証ユーザーを。
  2. ユーザーがグループ "A"に属している場合、ユーザー権利を制限したい場合
  3. ユーザーがグループ "B"に属している場合、私のコードに他のロジックを追加したいと思います。

私は上記のリストの最初のものを達成することができます。

Webアプリケーション(イントラネット)でフォーム認証を使用しています。私はいくつかの調査を行いましたが、Microsoft Active Directoryアプリケーションモード(ADAM)を使用するにはさまざまな提案があります。上記でADAMを使用しないでください。グループリストをコードに入れて、それに基づいてユーザーがグループに属していればコールすることができます。

私は自分のオプションを制限するグループレベルでしか考えていませんか? グループレベル からユーザにアクセス権を与える以外の方法があるのですか、Active Directory認証の概念を完全に理解していませんか?

+0

ASP.NET 2.0でWindows認証を使用する方法を見てください - http://msdn.microsoft.com/en-us/library/ff647405.aspx – jrummell

答えて

3

チェックこの質問は、それは違っ説明したものの、同じ問題である:Validate a username and password against Active Directory?

いずれかのウェイのActiveDirectoryは完全にC#の中に支持され、追加のシステムは必要ありません(私はADAMのどちらかが何であるかを知りません)。

UserPrincipal p = UserPrincipal.FindByIdentity(
domainContext, IdentityType.SamAccountName, userName); 
var groups = p.GetGroups(); 
foreach (GroupPrincipal g in groups) { /* do something */ } 
+0

私はADでユーザーを認証できますが、私は午前中ですあなたの提案したリンクには、ユーザーとパスワードの認証のための返信があります。 – Macnique

+0

@Macnique Plsは私の更新をチェックして、ADのユーザーグループを与えるコードをコピーしました。 – zmilojko

+0

上記のコードでdomainContextとUserNameは何ですか? – Macnique

1

あなたは、一般的な建築やベストプラクティスの問題について尋ねている場合は、私はクレームベース認証を見てお勧めします:、ユーザー名のグループを確認し、このコードを使用する

。特にActive Directory Federation Services(ADFS)。

基本的には、ユーザーがグループに基づくよりも細かいレベルでできることを制御する必要があるようです。グループメンバーシップは非常に幅広い場合があります。たとえば、「ユーザー」のすべてのユーザーが同じ権利を持つわけではなく、「販売」のすべてのユーザーが同じアクセス権を持つわけではありません。しかし、 "Sales - Managers"、 "Sales - Employees"、 "Sales - Executives"などのようなグループを作成したくない場合は、すぐに扱いにくくなります。グループの完全な配分を設計するのにどれだけの時間を費やしても、数年後にはセールスマネージャーの一部のサブセットが他のセールスマネージャーが行うことができないものがあるため、すべてが変更されます。

この問題を回避するために、クレームベースの認証が使用されています。グループメンバーシップレベルで権利を指定するのではなく、ユーザーが特定の "クレーム"を持っているかどうかをコードでチェックインするだけです。あなたは、あなたのアプリケーションに合った多くの主張を作成することができます。 「生年月日の変更」、「1000ドル以上の支払いの許可」などのクレームを持つことができます。

クレームはあなたのユーザーの身元に付けられているだけで、スレッドの現行の原則で利用できます。

ここで、あなたはあなたが求めるこれらの「請求」をどのように割り当てられますか?あなたがADFSを使用しているなら、とにかく欲しいです。あなたは明らかにADグループのメンバーシップに基づいてそれを行うことができます。データベース検索に基づいて行うことができます。あなたが望むなら、それは1日または1年の時間に行うことができます。

重要な点は、クレーム発行とクレーム実施が完全に独立しており、相互に影響を与えることなく独立して変更できる点です。あなたのコードはちょうど「こんにちは、この男は1000ドル以上の支払いをすることができるという主張があります。だから私は彼にそれをさせてくれるでしょう。なぜ彼はその主張を持っているのですか?そして、あなたのADFSは、それが適合していると思われる基準に基づいてクレームを発行することができます。たとえば、「ユーザーがManagersグループのメンバであるか、セキュリティデータベースのSuperUsersテーブルにエントリがある、または「Tim Timsky」という名前の場合、彼は$ 1000以上を費やすことが許可されます。

したがって、私のオプションを制限するグループレベルでのみ "、それは最も確かに必要はありません。新しい、緑色のフィールドプロジェクトを開始する場合、ADFSのような新しいツールは、より簡単に多くのオプションを提供します。

もちろん、すべての抽象化には複雑さが増すという警告が付いています。これはあなたのシステムに導入している別の部分です。アプリケーションをデカップリングして、より抽象度の高いレイヤーと機能を導入することができます。しかし、そのレイヤーを導入する価値があるかどうかは、アプリケーションの使用方法によって異なります。アプリケーションが「マネージャ」と「ユーザー」を区別する必要がないと思うなら、クレームベースの認証は過度の殺害です。しかし、時間が経つにつれて、曖昧で変化するルールに基づいて異なるユーザーに割り当てられる必要がある、アプリケーション内のさまざまな機能や機能が異なると思われる場合は、クレームベースの認証によってソリューションがより綺麗になります。

いつものように、2つの部分をデカップリングすることの正味の利点は、1つが他の部分と独立してどのくらいの頻度で変化するかによって決まります。

+0

:私は解決策を探していますここで私は2つのコンテナ管理者とADのユーザーを持つことができます。現在のユーザーがADの管理者またはユーザーに属しているかどうかに基づいてアクセス許可を付与したい – Macnique

+0

必要なのはUser.IsInRole( "Administrators" /weblogs.asp.net/scottgu/archive/2006/07/12/Recipe_3A00_-Enabling-Windows-Authentication-within-an-Intranet-ASP.NET-Web-application.aspxおよびhttp://weblogs.aspを参照してください。 net/scottgu/pages/Recipe_3A00_-Implementin g-Role_2D00_Based-Security-with-ASP.NET-2.0-using-Windows-Authentication-and-SQL-Server.aspx – Chaitanya

+0

上記のリンクを見ましたが、Windows認証についての詳細は、フォーム認証のライン。 – Macnique

関連する問題