WCF, режим совместимости ASP.NET и пользовательская аутентификация с использованием провайдеров членства - PullRequest
0 голосов
/ 26 октября 2010

Мне нужна помощь в следующем:)

Для начала я работаю над большим приложением, у которого есть клиент и сервер WinForms. Сервер в нашем случае это набор сервисов WCF. Существует один сервис, который отвечает за аутентификацию пользователей. Логика аутентификации является нестандартной и сложной, и служба аутентификации использует разных поставщиков членства.

Мы хотим защитить доступ к серверным сервисам для неаутентифицированных пользователей. Пользователи должны сначала пройти проверку подлинности, а затем использовать другие службы (в данном случае это другие системы, службы, клиент WinForms и т. Д.). Исходя из этого, мы решили использовать функцию авторизации URL / файлов в ASP.NET.

Итак, я установил режим совместимости ASP.NET, разрешил использование файлов cookie во всех конфигурациях привязки, добавил атрибут AspNetCompatibilityRequirements в наши службы и добавил следующие конфигурации в конфигурацию:

    <authentication mode="Forms">
      <forms cookieless="UseCookies">
        <credentials passwordFormat="Clear" />
      </forms>
    </authentication>

    <authorization>
       <deny users="?" />
    </authorization>

    ...

<location path="AuthenticationService.svc">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

В метод аутентификации нашего сервиса аутентификации я добавляю следующий код:

public AuthenticationResult AuthenticateUser(string username, string password)
{
    AuthenticationResult result = new AuthenticationResult();
    result = Authenticate(username, password);

    if (result.IsAuthenticated)
        FormsAuthentication.SetAuthCookie(username, true);

    return result;
}

Далее я написал следующий код:

var authClient = new AuthenticationServiceClient();
var result = authClient.AuthenticateUser("user", "password");
var otherClient = new OtherServiceClient();
var temp = otherClient.DoSomething();    

Но после аутентификации я не могу получить доступ к OtherServiceClient ...

Итак, как я могу разделить контекст вызова между вызовами служб WCF? Кто-нибудь может предоставить несколько полезных статей по этому вопросу?

Заранее спасибо! С наилучшими пожеланиями.

1 Ответ

0 голосов
/ 26 октября 2010

Вам необходимо:

1) Включить сеансы в WCF

2) Аутентифицироваться с помощью WCF

3) Продолжать использовать прокси вместо того, чтобы создавать новые.

Это полезно: http://msdn.microsoft.com/en-us/library/ms733040.aspx

...