質問

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

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

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

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

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

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

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

役に立ちましたか?

解決 2

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

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

他のヒント

これまでやったことはありませんが、確立されたときに GetAllUsers の呼び出しが成功するように、二次偽装コンテキストを作成することができます。

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

ProfileInfoCollection profiles = ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All);
foreach (ProfileInfo pi in profiles)
{
    ProfileCommon p = Profile.GetProfile(pi.UserName);
    countries.Add(p.Country);        
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top