Silverlight RIA服务 - 如何进行Windows身份验证?

时间:2009-09-19 18:06:18

标签: silverlight authentication windows-authentication wcf-ria-services

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

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

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

    1. App.xaml:appsvc:WindowsAuthentication而不是默认的FormsAuthentication
    2. Web.config:身份验证模式=“Windows”
    3. 通过这些修改,我解决了需求#1(获取当前登录的用户)。但是当我检查RiaContext.Current.User时,我无权访问AD中的其他属性,例如组成员身份。我怎样才能达到我的其他要求?

      感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

为了做到这一点,您必须编写自己的配置文件提供程序,然后修改用户类以包含这些配置文件属性,然后您可以访问这些属性。

请查看RIA服务概述文档第13.3页,如果您需要任何帮助,请与我们联系。

我们正处于实施RIA服务应用程序的中间,并编写了我们自己的自定义会员资格提供商和个人资料提供商,所以如果您需要帮助,请告诉我。

答案 1 :(得分: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;
    }
}

答案 2 :(得分:3)

嘿大家,MSDN上有一篇新文章,我现在正在研究它。

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