5

我正在构建我的第一个 Silverlight 3 + RI 服务应用程序,需要一些帮助。
它将部署在受控的企业内部网、100% 的 Windows 客户端中。我从 Silverlight 业务应用程序模板开始。
这些是我的要求:

  1. 启动时,应用程序需要识别当前登录的用户。
  2. 应用程序需要访问 AD 中用户的其他属性,例如电子邮件、全名和组成员身份。
  3. 组成员资格用于增强应用程序中的某些功能。
  4. “以不同用户身份登录”链接将始终可用 - 某些机器在整个企业中都可用,以某个通用用户身份登录(通过缺少某些成员组来验证)。在这种情况下,可以输入凭据并以不同于已登录机器的用户身份登录(模拟)应用程序。
  5. 此用户将用于服务调用


我在默认的业务应用程序模板中修改了以下内容:

  1. App.xaml:appsvc:WindowsAuthentication 而不是默认的 FormsAuthentication
  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 回答