Как вы уже видели, после того, как FormsAuthenticationTicket был сериализован в cookie и десериализован, время истечения срока действия и выдачи всегда будет локальным.
В разделе «Примечания» в MSDN говорится «Если FormsAuthenticationTicket был создан с использованием конструктора, который принимает параметр expiration, свойство Expiration возвращает значение, указанное в параметре expiration.». Следовательно, если вы передадите UTC, вы будете возвращать UTC до тех пор, пока билет не будет сериализован / десериализован, после чего он будет преобразован в местный.
Если вы предоставляете IssueDate и expiration для конструктора, они обычно должны быть по местному времени. Однако не делается никаких попыток преобразовать их в местное время - возможно, причина этого в обратной совместимости с .NET 1.x.
В .NET 1.x структура DateTime не имела свойства «Kind», поэтому невозможно было сказать, что вызывающая сторона указала UTC или местное время - она просто была принята как локальная.
Поэтому я предлагаю вам изменить свой код, чтобы передавать местное время конструктору FormsAuthenticationTicket, хотя он действительно подвергает вас этой ошибке, зарегистрированной в Microsoft Connect .