Файл cookie ASP.Net Angular 6 HttpClient отправляется только в том случае, если путь URL-адреса совпадает - PullRequest
0 голосов
/ 30 августа 2018

У меня есть веб-сервис с ASP.Net Web Api 2 и клиент Angular 6. Теперь на моем сервере в моем контроллере я добавляю файл cookie авторизации с:

   [RoutePrefix("api/auth")]
   public class AuthController : ApiController
    {
       [HttpPost]
       public HttpResponseMessage LogInUser(LoginData loginData)
       {
          // .. check password ...
          FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
               1,                                     // ticket version
               loginData.UserName,                         // authenticated username
               DateTime.Now,                          // issueDate
               DateTime.Now.AddMinutes(60),           // expiryDate
               true,                                 // true to persist across browser sessions
               String.Empty,                          // can be used to store additional user data !!! Cannot be null!!!
               FormsAuthentication.FormsCookiePath);  // the path for the cookie

            // Encrypt the ticket using the machine key
            string encryptedTicket = FormsAuthentication.Encrypt(ticket);

            CookieHeaderValue cookie = new CookieHeaderValue(FormsAuthentication.FormsCookieName, encryptedTicket);

            HttpResponseMessage respMessage = new HttpResponseMessage();
            respMessage.Headers.AddCookies(new CookieHeaderValue[] { cookie});
            return respMessage;
        }

    }

На сервере включены cors, а на стороне клиента я всегда устанавливаю 'withCredentials':

@Injectable()
export class IcaHttpInterceptor implements HttpInterceptor {

  constructor() {
  }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    request = request.clone({
      withCredentials: true
    });
    console.log("outgoing request", request);
    return next.handle(request);
  }
}

, поэтому, если я делаю сообщение с HttpClient в 'localhost / api / auth', я получаю cookie в заголовке ответа, следующее сообщение в другой метод в 'api / auth' cookie также отправляется, но теперь, когда Я отправляю запрос на другой путь, например 'api / users' cookie не отправляется .. Вопрос почему?

1 Ответ

0 голосов
/ 31 августа 2018

После длительного тестирования я посмотрел в браузере, какая информация есть в куки. Хотя я установил путь к нулю на сервере, путь установлен в «api / auth». На сервере я теперь установил путь к cookie в явном виде на «/»:

[RoutePrefix("api/auth")]
   public class AuthController : ApiController
    {
       [HttpPost]
       public HttpResponseMessage LogInUser(LoginData loginData)
       {
          // .. check password ...
          FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
               1,                                     // ticket version
               loginData.UserName,                         // authenticated username
               DateTime.Now,                          // issueDate
               DateTime.Now.AddMinutes(60),           // expiryDate
               true,                                 // true to persist across browser sessions
               String.Empty,                          // can be used to store additional user data !!! Cannot be null!!!
               FormsAuthentication.FormsCookiePath);  // the path for the cookie

            // Encrypt the ticket using the machine key
            string encryptedTicket = FormsAuthentication.Encrypt(ticket);

            CookieHeaderValue cookie = new CookieHeaderValue(FormsAuthentication.FormsCookieName, encryptedTicket);
            // This is the important part!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            cookie.Path = "/";
            HttpResponseMessage respMessage = new HttpResponseMessage();
            respMessage.Headers.AddCookies(new CookieHeaderValue[] { cookie});
            return respMessage;
        }

    }
...