Я создаю большой сайт ASP.NET 4, который имеет серверную часть службы WCF.Я бы хотел, чтобы сайт использовал сервис для входа и авторизации.
В основном, когда пользователь попадает на страницу входа в систему, вместо использования поставщика членства я хочу использовать службу WCF в качестве механизма аутентификации.
Служба WCF уже использует аутентификацию и авторизацию (солицетворение), так что клиенты службы получают ошибки, если они пытаются выполнить методы службы, к которым у них нет разрешений.
Вопрос в том, как связать это с сайтом ASP.NET?
Вот пример кода, который я использую:
Интерфейс веб-службы:
[ServiceContract]
public interface IService
{
[OperationContract]
bool Foo();
[OperationContract]
void Bar();
}
Веб-служба:
public class BackEndService : IService
{
[PrincipalPermission(SecurityAction.Demand, Role="FooRole")]
public bool Foo()
{
return false;
}
[PrincipalPermission(SecurityAction.Demand, Role="Bar")]
public void Bar()
{
//...
}
}
На клиенте:
public class LoginPage : Page
{
public void LoginButton_Clicked(object sender, EventArgs e)
{
string username = TxtUsername.Value;
string password = TxtPassword.Value;
BackEndService client = new BackEndService();
client.CleintCredentials.Username = username;
client.ClientCredentials.Password = password;
client.Foo(); //if the credentials supplied do not have permissions there will be error
client.Bar();
}
}
Я хочу добиться того, чтобы некоторые функциональные возможности элемента пользовательского интерфейса были помечены с помощьюАтрибут PrincipalPermission, чтобы пользователю не приходилось совершать поездки в службу, чтобы обнаружить, что у них нет разрешений.
Более того, я хотел бы, чтобы некоторые элементы пользовательского интерфейса загружались / выгружались на основена разрешения пользователя.
Возможно ли, или я должен внедрить некоторую логику в мой сервис, чтобы вернуть те модули пользовательского интерфейса, которые видит пользователь?Возможно ли обрабатывать разрешения через службу, как если бы она была поставщиком членства, как в случае использования PrincipalPermissionAttribute для кода элемента пользовательского интерфейса позади?
Спасибо,
<bleepzter/>