5

しばらくの間、これに関する解決策を探していましたが、残念ながら各スレッドは行き止まりです。

私は、社内でのみ使用される C#/ASP.net Web アプリに取り組んでいます。IIS と web.config ファイルの両方で匿名アクセスが無効になっているため、IIS は Windows 認証ユーザー (Active Dir ユーザー) を使用する必要があります。

私の問題は、次のコードが完全に機能して、必要な (または任意の) AD ユーザーを取得することです。

using System.DirectoryServices.AccountManagement;

... other code ...

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain", "someADuser", "someADuserpassword");
UserPrincipal winuser = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "samaccountname");

上記の PrincipalContext で使用されている「someADuser」は、Windows から現在ログインしているユーザーであるため、認証済みで有効な AD ユーザーです。次のコードを (まったく同じユーザーがまだログインしている状態で) 使用すると、「ログオンに失敗しました: 不明なユーザー名またはパスワードが正しくありません」というエラーが表示されます。

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain");
UserPrincipal winuser = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "samaccountname");

PrincipalContext オブジェクトで指定されていない場合、UserPrincipal.FindByIdentity は何らかの理由でログインしているユーザーの検証済みの資格情報を使用していないようです。これはやりたくないことです。

必要な設定 (希望) が web.config に追加されていても、なんらかの理由で ctx がログインしている Windows ユーザーを取得していない可能性はありますか?

<authentication mode="Windows"/>
<authorization>
  <deny users="?"/>
</authorization>

また、匿名アクセスは IIS で完全に無効になっていますか?

4

4 に答える 4

2

匿名アクセスがオフになっていると、現在のプリンシパルはデフォルトで Windows にログインしているユーザーになります。@RogerN で示されているとおりではないことがわかりました。

@TheKingDave で言及されている次のステートメントを使用すると、基本的には Windows にログインしているユーザーになりすまし、現在のスレッドを「ASP」(私の場合) アカウントではなくプリンシパルで実行します。

私たちのドメインのすべてのユーザーは Active Directory へのクエリ/読み取りアクセス権を持っているため、これは、私が最初に望んでいた詳細を取得するのに問題にはなりません。

終了コード(テスト中):

System.Web.HttpContext.Current.Request.LogonUserIdentity.Impersonate();
ctx = new PrincipalContext(ContextType.Domain, System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName);
UserPrincipal winuser = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "whicheveraccount");

将来的にsome1に役立つことを願っています! どうも!;-)

于 2013-04-09T15:21:38.060 に答える
1

問題を解決するために多くの検索/調査を行いましたが、何も機能しませんでした@.

app.CreatePerOwinContext(() => new PrincipalContext(ContextType.Domain, @"abc.net", @"OU=Customers,DC=abc,DC=net", ContextOptions.SimpleBind, @"abcnet\authuser", @"!$%MyPassword"));

そして、それはうまくいきました。ああ!

于 2015-05-19T06:53:34.263 に答える