Проверка подлинности с помощью форм не работает. 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>
- Добавить службу аутентификации и правильный класс пользователя (добавить 3 реквизита).
- На стороне клиента добавьте это в 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 не был отправлен.
Что я пропустил?