Microsoft Media Platform + Forms身份验证

时间:2012-01-01 15:03:29

标签: c# web-config forms-authentication wcf-ria-services mmppf

表单身份验证不起作用。当SMF尝试访问需要特定用户角色的服务器上的* .ism / Manifest文件时,不会将身份验证cookie发送到服务器。

我做什么: 1.使用支持的RIA WCF创建新的Silverlight Smooth Streaming模板。 2.配置web.config:

<connectionStrings>
<add name="ApplicationServices" connectionString="Data Source=[SERVER];Initial Catalog=[CATALOG];User ID=[USER];Pwd=[PASSWORD];" providerName="System.Data.SqlClient" />

<system.web>
      <authentication mode="Forms">
        <forms loginUrl="~/Account/LogOn" timeout="2880" />
      </authentication>
      <membership>
        <providers>
          <clear />
          <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
        </providers>
      </membership>
      <profile>
        <providers>
          <clear />
          <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
        </providers>
        <properties>
          <add name="Gender" />
          <add name="Birthday" />
          <add name="AvatarPath" />
        </properties>
      </profile>
      <roleManager enabled="true">
        <providers>
          <clear />
          <add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
            <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" /> 
        </providers>
      </roleManager>
  1. 添加身份验证服务并更正用户类(添加3个道具)。
  2. 在客户端将此添加到app.xaml.cs:
  3.      public App()
         {
         //Default things...
         InitializeWebContext();
         }
    
        private void InitializeWebContext()
        {
            WebContext webContext = new WebContext();
            var fa = new FormsAuthentication();
            var ac = new AuthenticationDomainService1();
            fa.DomainContext = ac;
            fa.Login(new LoginParameters("user", "password"), (y) =>
                                                                        {
                                                                            if (!y.HasError)
                                                                            {
                                                                                this.RootVisual = new MainPage();
                                                                            } 
                                                                        }, null);
            webContext.Authentication = fa;
            ApplicationLifetimeObjects.Add(webContext);
            Resources.Add("WebContext", WebContext.Current);
        }
    

    访问受目标目录中的web.config文件限制:

        <?xml version="1.0" encoding="UTF-8"?>
        <configuration>
            <system.web>
                <authorization>
                <allow roles="Role_name" />     
                <deny users="*" />                                      
                </authorization>
            </system.web>
        </configuration>
    

    用户存在此角色。

    当我使用Xaml(Big Bunny)中指定的默认视频时 - 一切都很好。但是,当我将mediasource更改为服务器上s限制区域的路径时,出现访问错误。 在客户端,我成功获得用户凭据。

    Fiddler展示下一件事: 当我尝试访问RIA WCF上的另一个resctricted方法([RequiresAuthentication])时,客户端发送Auth cookie,但是当SMFPlayer尝试访问媒体源时,该cookie未被发送。

    我错过了什么?

1 个答案:

答案 0 :(得分:0)

我找到了一些解决方法: 如果将流文件传输到子目录中,并限制对它的访问(而不是具有“ism”文件的目录)。清单将发给匿名用户,但数据流仅用于注册(当玩家尝试触摸数据流时,它会成功附加auth cookie)。