Как связать разрешения ASP.NET с сервисом WCF - PullRequest
1 голос
/ 27 января 2011

Я создаю большой сайт 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/>

1 Ответ

1 голос
/ 27 января 2011

Если вы хотите использовать членство в ASP.NET, вам нужно будет написать собственного провайдера членства для аутентификации в вашей службе WCF.Возможно, вам потребуется добавить операцию в службу WCF, чтобы получить список ролей, к которым принадлежит пользователь.Затем вы можете использовать класс Membership, чтобы определить, является ли пользователь определенной ролью, и при необходимости скрыть / показать элементы пользовательского интерфейса.

См. http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx для получения дополнительной информации о создании поставщика членства.

...