8

独自のユーザー、役割、およびアクセス許可データベースを管理するASP.NETアプリケーションがあり、最近、Windowsドメインアカウントを保持するためのフィールドをユーザーテーブルに追加しました。

ユーザーがアプリケーションに 物理的にログインする必要がなく、現在ログインしているWindowsドメインアカウントDOMAIN\usernameに基づいて自動的にログインするようにしたいと思います。独自のUserテーブルに対してWindowsドメインアカウントを認証したいと思います。

これはWindowsフォームで行うのが簡単ですが、Webフォームでこれを行うことは可能ですか?

ユーザーにWindowsチャレンジ画面が表示されないようにしたいのですが、システムにログインを処理させたいのです。

明確化:独自のカスタムPrincipalオブジェクトを使用しています。

明確化:違いがあるかどうかはわかりませんが、IIS7を使用しています。

4

8 に答える 8

2

この種の統合はサーバー レベルで行われます。ユーザーがログインしていないことを判断するのは IIS です。そして、ブラウザが反応する認証プロンプトをユーザーに送り返すのは IIS です。

ドメインログインを使用したい場合、これを行う方法は 1 つしかありません。統合 Windows 認証。これは、IIS サーバーもドメインの一部であり、ユーザーがプロキシ経由ではなく、ドメインの一部であるマシンからマシンに直接アクセスしている場合 (ユーザーが適切にログインしている場合) にのみ機能します。

ただし、カスタム プリンシパル オブジェクトは楽しいゲームを作成する場合があります。このタイプの認証は、WindowsPrincipal と WindowsIdentity になります。User オブジェクトを介してアクセスできます (「方法: ASP.NET 2.0 で Windows 認証を使用する」を参照) 。

カスタムロールのためにカスタムプリンシパルが必要だと思いますか? この 2 つをうまくプレイさせることはできないと思います。データ ストアを参照するカスタムロール プロバイダーを作成するか、プログラムごとにロールを提供し、優れた管理ツールが付属する AD の拡張機能であるADAMを参照できます。

于 2008-09-20T17:23:45.397 に答える
1
using System.Security.Principal;
...
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User;

現在のドメインユーザーを取得します。もちろん、IISがWindows認証を処理するように設定されていることを確認する必要があります。

于 2008-09-10T13:44:28.310 に答える
1

これは役立つかもしれません:

WindowsIdentity myIdentity = WindowsIdentity.GetCurrent();

WindowsPrincipal myPrincipal = new WindowsPrincipal(myIdentity);

string name = myPrincipal.Identity.Name;
string authType = myPrincipal.Identity.AuthenticationType;
string isAuth = myPrincipal.Identity.IsAuthenticated.ToString();

string identName = myIdentity.Name;
string identType = myIdentity.AuthenticationType;
string identIsAuth = myIdentity.IsAuthenticated.ToString();
string iSAnon = myIdentity.IsAnonymous.ToString();
string isG = myIdentity.IsGuest.ToString();
string isSys = myIdentity.IsSystem.ToString();
string token = myIdentity.Token.ToString();

免責事項:これはtechnetの記事から入手しましたが、リンクが見つかりません。

于 2008-09-10T13:49:03.683 に答える
1

私はあなたが数年前にやりたいことをほぼ正確に行いました。私はそれのためにいくつかのコードを見つけようとしていますが、それは前の仕事であったのでコードは家にあります。

この記事を出発点として使用したのですが、覚えています。LDAPプロバイダーを設定して、ユーザーとLDAPのチェックを実際に実行できるようにします。LDAPアプローチを試す場合は、確認すべきことが1つあります。LDAPを設定した設定ファイルで、LDAPがすべて大文字であることを確認してください。そうでない場合は解決されません。

于 2008-09-10T13:53:17.977 に答える
0

Request.ServerVariables( "LOGON_USER")を試してください。

このディレクトリが匿名ユーザーを許可しないようにディレクトリセキュリティオプションが設定されている場合、サーファーがこのページにアクセスすると、ユーザー名とパスワードを要求する標準のモーダルダイアログが表示されます。Request.ServerVariables( "LOGON_USER")は、そのユーザーを返します。

ただし、独自のカスタムセキュリティオブジェクトを使用しているため、これはおそらく機能しません。そのログオンボックスを回避する方法を理解できるか、サイトが要求する前にNTクレデンシャルをサイトに渡すことができれば、すべての準備が整います。

于 2009-07-09T20:12:52.770 に答える
0

を使用できますSystem.Threading.Thread.CurrentPrincipal

于 2008-09-10T14:18:00.353 に答える
0

Request.ServerVariables["REMOTE_USER"]

これはあなたのセットアップでは検証されていませんが、しばらく前にこれを使用したことを思い出します.

于 2008-09-11T18:41:43.643 に答える
0

なりすましについて考えたことはありますか?ユーザーの NT ログオン資格情報をカスタム セキュリティ オブジェクトに格納し、必要に応じてコードを介してユーザーを偽装することができます。

http://msdn.microsoft.com/en-us/library/aa292118(VS.71).aspx

于 2009-07-10T14:03:21.057 に答える