Существует более простой способ авторизации пользователей службы, это должно решить некоторые из ваших проблем.
Сначала разместите свою службу в общедоступной папке без авторизации вообще. Это позволит вам добавить ссылку из приложения Windows 8 без проблем.
Тогда, в службе, создать метод для аутентификации пользователей:
public bool Login(string UserName, string Pwd)
{
// validate the user and create the forms cookie upon succesfull validaition
if (IsValid(UserName, Pwd))
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(...);
string CookieName = FOrmsAuthentication.FormsCookieName;
string CookieValue = ticket.Encrypt();
this.Response.Cookies.Add(new HttpCookie(CookieName, CookieValue));
}
}
Этот публичный метод будет первый ваш метод для Windows 8 приложение должно вызвать.
Тогда вы защищаете все другие методы обслуживания с PrincipalPermission
атрибута:
[PrincipalPermission(Roles="Admin, User")]
public TheMethodForAdminOrUser()
{
// do whatever you want
}
Атрибуты будут охранять вызов ваших методов обслуживания, так что только пользователи, прошедшие проверку подлинности с действительным вызовом метода Login
будет иметь доступ к вашим оказание услуг.
Это будет работать, но что, если я использую HttpContext в некоторых своих веб-методах, не нужно ли приложению Windows 8 отправлять идентификатор сеанса или что-то в каждом запросе, чтобы определить, что текущий пользователь зарегистрирован из клиент? – user1027620
Пока вы используете ТОЛЬКО прокси-экземпляр для всех вызовов, прокси-сервер будет хранить все файлы cookie, включая файл cookie, содержащий идентификатор сеанса. –
Удивительный, спасибо. – user1027620