【问题标题】:Silverlight RIA Services - how to do Windows Authentication?Silverlight RIA 服务 - 如何进行 Windows 身份验证?
【发布时间】:2009-09-19 18:06:17
【问题描述】:

我正在构建我的第一个 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 的其他属性,例如组成员身份。我怎样才能达到我的其他要求?

感谢您的帮助。

【问题讨论】:

  • 你有什么收获吗?
  • 没有。我很惊讶没有人提出解决方案。我也在 silverlight.net 的 RIA 服务论坛上问过同样的问题,但我也没有得到任何回应!
  • 您在构建 Silverlight 业务应用程序时关注了哪些信息来源?
  • 我一直在关注 Brad Abrams 的样品,这些样品非常棒。这个 (blogs.msdn.com/brada/archive/2009/07/13/…) 应该涵盖使用带有 Silverlight 的 RIA 进行的身份验证,但我觉得它还不够深入,无法真正实现我需要的东西。你怎么看?

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


【解决方案1】:

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

查看 RIA 服务概述文档的第 13.3 节页面,如果您需要任何帮助,请告诉我。

我们正在实施 RIA 服务应用程序,并且已经编写了我们自己的自定义会员提供和配置文件提供程序,所以如果您需要帮助,请告诉我。

【讨论】:

  • 嗨,米哈尔!我在做这件事时遇到了很多麻烦。我不太明白我到底需要做什么?我是否需要使用数据库来存储用户凭据?我觉得我完全错过了一些东西,所有的教程都很模糊。我真的很感谢一些帮助和示例等。我刚刚完成了一个完整的 RIA 应用程序,它有一些很棒的功能,但我无法在没有身份验证的情况下将它移动到云端:-(
  • 是的,我们也发现它有点困难。总而言之,我们做了以下工作: 1) 通过覆盖 MembershipProvider 类实现了成员资格提供程序 2) 通过覆盖 ProfileProvider 类实现了配置文件提供程序 3) 实现了角色提供程序。 4) 将所有这些添加到 silverlight 应用程序的 web.config(非常重要)中 请记住,我们正在针对 AD 进行身份验证,但不使用 ASP.NET 成员资格或配置文件提供程序。给我发电子邮件,我可以提供一些样品。干杯
【解决方案2】:

大家好,MSDN 上有一篇新文章,我正在处理中。

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

【讨论】:

    【解决方案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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多