Как использовать cookie аутентификации от Услуги аутентификации WCF в приложении MVC ASP.NET

Хорошо, у меня было мало удачи при нахождении любой документации или учебных руководств для моего определенного сценария.

У меня есть веб-приложение MVC ASP.NET, которое будет использовать сервисы WCF для всего включая аутентификацию и роли (через поставщиков членства на бэкенде WCF).

У меня не было проблемы при установке услуг аутентификации, но это не устанавливает cookie в веб-приложении. Документы для метода Входа в систему обслуживания указывают, что обеспечение электричеством События CreatingCookie возможно, но это не имеет никакого влияния на клиенте (я примерил сервисную сторону также, снова никакое влияние). Таким образом, я выяснил, как получить cookie. Я попытался вручную установить подлинный cookie на клиенте, но до сих пор он не работает; при дешифровании сбоев из-за дополнения и устанавливания значения cookie от один данный сервером не читаем клиентом.

Кто-либо знает, как Вы, как предполагается, используете cookie, который сгенерирован Услугой аутентификации WCF? Я просто предполагаю, что сессией все управляют на сервере WCF, и просто проверьте IsLoggedIn () на сервисе при каждой загрузке страницы?

Заранее спасибо.

14
задан ŁukaszW.pl 6 August 2010 в 19:41
поделиться

1 ответ

Недавно я пытался реализовать ту же функциональность, которую вы описали. Мне удалось заставить его работать с помощью следующего кода:

    private readonly AuthenticationServiceClient service = new AuthenticationServiceClient();

    public void SignIn(string userName, string password, bool createPersistentCookie)
    {
        using (new OperationContextScope(service.InnerChannel))
        {
            // login
            service.Login(userName, password, String.Empty, createPersistentCookie);

            // Get the response header
            var responseMessageProperty = (HttpResponseMessageProperty)
                OperationContext.Current.IncomingMessageProperties[HttpResponseMessageProperty.Name];

            string encryptedCookie = responseMessageProperty.Headers.Get("Set-Cookie");

            // parse header to cookie object
            var cookieJar = new CookieContainer();
            cookieJar.SetCookies(new Uri("http://localhost:1062/"), encryptedCookie);
            Cookie cookie = cookieJar.GetCookies(new Uri("http://localhost:1062/"))[0];

            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
            if (null != ticket)
            {
                //string[] roles = RoleManager.GetRolesFromString(ticket.UserData); 
                HttpContext.Current.User = new GenericPrincipal(new FormsIdentity(ticket), null);
                FormsAuthentication.SetAuthCookie(HttpContext.Current.User.Identity.Name, createPersistentCookie);
            }
        }
    }

Он делает именно то, что вы описали в комментарии к вашему вопросу.

РЕДАКТИРОВАТЬ

Я размещаю здесь серверную часть этого кода для справки.

public class HttpResponseMessageInspector : BehaviorExtensionElement, IDispatchMessageInspector, IServiceBehavior
{
    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {

        HttpRequestMessageProperty httpRequest = request.Properties[HttpRequestMessageProperty.Name]
        as HttpRequestMessageProperty;

        if (httpRequest != null)
        {
            string cookie = httpRequest.Headers[HttpRequestHeader.Cookie];

            if (!string.IsNullOrEmpty(cookie))
            {
                FormsAuthentication.Decrypt(cookie);
                FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(cookie);
                string[] roles = PrincipalHelper.GetUserRoles(authTicket);
                var principal = new BreakpointPrincipal(new BreakpointIdentity(authTicket), roles);

                HttpContext.Current.User = principal;                  
            }
            // can deny request here
        }

        return null;
    }
}
11
ответ дан 1 December 2019 в 14:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: