大家好:我正在编写一个基于C#的SignalR客户端,它与需要Forms身份验证的IIS服务器后面的SignalR服务器进行交互 . 根据用户凭据,服务器返回持久性和非持久性票证,其过期时间为30分钟(安全事项不使用滑动过期) .

在客户端,我得到了票证,我可以看到,当使用正确的用户时,它被标记为持久的,虽然它的有效期比创建日期早30分钟 . 我将cookie分配给HubConnection(使用CookieContainer.Add方法),一切正常,直到故障单过期 .

即使是持久性的,当票证到期时,它也会从HubConnection CookieContainer中删除,并且在我使用新票证创建全新连接之前,我无法再次连接到服务器 .

UPDATE

在仔细调试问题之后,IIS7和IIS8服务器似乎没有正确处理持久性票证:虽然它们是生成持久性的(属性FormsAuthenticationTicket.IsPersistent为true)但它们带有到期日期(属性FormsAuthenticationTicket.Expiration包含将票证超时添加到FormsAuthenticationTicket.IssueDate属性的结果)实际上它们在票证超时后到期,因此每个SignalR集线器方法调用都会返回Unathorized(HTTP代码401)错误 . 这是使用的web.config配置:

<system.web>
    <authentication mode="Forms">
        <forms loginUrl="Auth/Ticket.aspx" defaultUrl="/" slidingExpiration="false" timeout="30"/>
    </authentication>
</system.web>

我已经尝试了一些解决方案herehere没有运气 .