Microsoft Media Platform + Аутентификация форм - PullRequest
2 голосов
/ 01 января 2012

Проверка подлинности с помощью форм не работает. Auth cookie не отправляются на сервер, когда SMF пытается получить доступ к * .ism / Manifest файлам на сервере, который требует определенных пользовательских ролей.

Что я делаю: 1. Создайте новый шаблон Silverlight Smooth Streaming с поддержкой RIA WCF. 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:
     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 на путь к закрытой зоне на моем сервере, я получаю ошибку доступа. На стороне клиента я успешно получаю учетные данные пользователя.

Скрипач показывает следующее: Когда я пытаюсь получить доступ к другим закрытым методам ([Требуется аутентификация]) в RIA WCF, клиент отправляет файлы cookie Auth, но когда SMFPlayer пытается получить доступ к источнику мультимедиа, этот файл cookie не был отправлен.

Что я пропустил?

1 Ответ

0 голосов
/ 08 января 2012

Я нашел какой-то обходной путь: Если вы переносите потоковые файлы в подкаталог и ограничивает доступ к нему (вместо каталога с файлами «ism»). Манифест будет выдан анонимным пользователям, но потоки данных предназначены только для зарегистрированных (когда игрок пытается прикоснуться к потоку данных, он успешно присоединяет аутентификационные куки).

...