2

ActiveDirectoryMembershipProviderとSqlProfileProviderを使用してasp.netイントラネットWebサイトを開発しています。

私のウェブサイトの要件の1つは、「誕生日」ページを用意することです。このページでは、すべてのプロファイルを一覧表示し、そこから誕生日情報を取得する必要があります。

私は次のように問題に取り組みました:

  • Membership.GetAllUsers()静的メソッドを呼び出します。
  • ユーザーのリストを繰り返し処理し、メンバーのユーザー名からプロファイルを取得します

ただし、このアプローチは次の理由で失敗しました。

  • Webアプリケーションは現在ログに記録されているユーザーになりすましてADの詳細を取得しているため(web.configのID impersonate = "true")、GetAllUsersを呼び出そうとすると「アクセスが拒否されました」という例外が発生します
  • Webアプリにスーパーユーザーアカウントを偽装させようとすると、ADはユーザー名をusername @ domain-name形式で返しますが、私のプロファイルプロバイダーでは、最初はdomain-name\username形式で保存されていました。

では、この問題を回避して、組織のメンバーのプロファイルの全リストを取得するにはどうすればよいでしょうか。

4

3 に答える 3

2

GetAllProfiles()メソッドを持つProfileManagerがあります。

http://msdn.microsoft.com/en-us/library/system.web.profile.profilemanager.getallprofiles.aspx

于 2009-09-10T11:06:42.973 に答える
2

私はこれまでにこれを行ったことがありませんが、二次的ななりすましコンテキストの作成を試みることができます。確立されると、への呼び出しGetAllUsersは成功するはずです。

http://chiragrdarji.blogspot.com/2007/03/impersonation-using-code.htmlをご覧ください。この章では、System.Security.Principal.WindowsIdentityクラスをと一緒に使用することでセキュリティコンテキストの変更を実現したようSystem.Security.Principal.WindowsImpersonationContextです。チェックする価値があるかもしれません。

于 2009-09-10T10:09:33.220 に答える
1
ProfileInfoCollection profiles = ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All);
foreach (ProfileInfo pi in profiles)
{
    ProfileCommon p = Profile.GetProfile(pi.UserName);
    countries.Add(p.Country);        
}
于 2011-12-30T11:11:50.013 に答える