5

初めての Silverlight 3 + RI Services アプリケーションを構築していて、助けが必要です。
これは、管理された企業イントラネット、100% Windows クライアントに展開されます。Silverlight ビジネス アプリケーション テンプレートから始めました。
これらは私の要件です:

  1. 起動時に、アプリケーションは現在ログインしているユーザーを認識する必要があります。
  2. アプリケーションは、電子メール、フル ネーム、グループ メンバーシップなど、AD 内のユーザーの他のプロパティにアクセスできる必要があります。
  3. グループ メンバーシップは、アプリケーションの特定の機能を付与するために使用されます。
  4. 「別のユーザーとしてログイン」リンクは常に利用可能です - 一部のマシンは企業全体で利用可能で、特定の汎用ユーザーとしてログインしています (特定のメンバーシップ グループが存在しないことによって確認されます)。この場合、資格情報を入力し、マシンに既にログインしているユーザーとは別のユーザーとしてアプリケーションにログイン (なりすまし) できます。
  5. このユーザーはサービス呼び出しで使用されます


デフォルトのビジネス アプリケーション テンプレートで以下を変更しました。

  1. App.xaml: デフォルトの FormsAuthentication の代わりに appsvc:WindowsAuthentication
  2. Web.config: 認証モード="Windows"

これらの変更により、要件 1 を解決します (現在ログインしているユーザーを取得します)。しかし、調べてみるRiaContext.Current.Userと、AD からグループ メンバーシップなどの他のプロパティにアクセスできません。他の要件を満たすにはどうすればよいですか?

ご協力いただきありがとうございます。

4

3 に答える 3

4

これを行うには、独自のプロファイル プロバイダーを記述し、ユーザー クラスを変更して、アクセスできるこれらのプロファイル プロパティを含める必要があります。

RIA サービスの概要ドキュメントのセクション 13.3 のページを見て、何か助けが必要な場合はお知らせください。

私たちは RIA サービス アプリケーションを実装している最中であり、独自のカスタム メンバーシップ プロバイダーとプロファイル プロバイダーを作成しました。必要な場合はお知らせください。

于 2009-10-03T00:03:28.617 に答える
3

BusinessApplicationTemplate によって提供される AuthenticationService でハッキングした方法を次に示します。

 [EnableClientAccess]
    public class AuthenticationService : AuthenticationBase<User> {

    protected override User  GetAuthenticatedUser(System.Security.Principal.IPrincipal principal)
    {
        User user = base.GetAuthenticatedUser(principal);
        Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
        SystemWebSectionGroup grp = (SystemWebSectionGroup)config.GetSectionGroup("system.web");
        AuthenticationSection auth = grp.Authentication;
        if (auth.Mode == AuthenticationMode.Forms)
        {
        }
        else if (auth.Mode == AuthenticationMode.Windows)
        {
            string[] a = user.Name.Split('\\');
            System.DirectoryServices.DirectoryEntry ADEntry = new System.DirectoryServices.DirectoryEntry("WinNT://" + a[0] + "/" + a[1]);
            string Name = ADEntry.Properties["FullName"].Value.ToString();
            user.Name = Name;
        }
        return user;
    }
}
于 2010-04-22T21:40:44.000 に答える
3

みなさん、MSDN に新しい記事がアップされました。現在、その記事に取り組んでいます。

http://msdn.microsoft.com/en-us/library/ee707353(VS.91).aspx

于 2010-06-10T22:33:17.697 に答える