Tôi có một trang web là một bên dựa vào STS tùy chỉnh dựa trên WIF của chúng tôi. Gần đây, chúng tôi đã triển khai Bộ nhớ cache bảo mật như được mô tả ở đây: Azure/web-farm ready SecurityTokenCache. Sự khác biệt chính giữa việc thực hiện của chúng tôi và sự khác biệt được mô tả trong liên kết đó là chúng tôi sử dụng Azure AppFabric Caching làm cửa hàng sao lưu cho bộ nhớ cache bền, thay vì lưu trữ bảng. Điều này đã giúp chúng tôi giải quyết vấn đề cắt ngắn thẻ trên một số trình duyệt nhất định nhưng đã giới thiệu một vấn đề mới (Chúng tôi thấy vấn đề cắt ngắn chủ yếu trên các trang có cookie phân tích + google phân tích ngoài cookie fedauth). Chúng tôi hiện đang nhận ngoại lệ sau vài nghìn lần mỗi ngày:Mã thông báo bảo mật WIF Caching
System.IdentityModel.Tokens.SecurityTokenException
ID4243: Could not create a SecurityToken. A token was not found in the token cache and no cookie was found in the context.
System.IdentityModel.Tokens.SecurityTokenException: ID4243: Could not create a SecurityToken. A token was not found in the token cache and no cookie was found in the context.
at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver)
at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(Byte[] token, SecurityTokenResolver tokenResolver)
at Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte[] sessionCookie)
at Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken)
at Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Ngoại lệ này dường như xảy ra trong vòng chuyển hướng, vì vậy chúng tôi sẽ thấy hàng trăm trong số đó trong khoảng thời gian 1-2 phút.
Tôi không thể định vị bất kỳ thông tin hữu ích nào trong khi nghiên cứu ngoại lệ. Nugget duy nhất nắm giữ bất kỳ hy vọng cho đến nay là ai đó nói rằng nó có thể liên quan đến đối tượng được lưu trữ hết hạn trước phiên.
Chúng tôi không thể tạo lại vấn đề nội bộ và chỉ biết nó tồn tại vì hàng nghìn mục điền vào bảng Elmah của chúng tôi. Bất kỳ trợ giúp hoặc thông tin chi tiết nào sẽ được đánh giá rất nhiều.
Chúng tôi đẩy ra ngoài những gì chúng tôi nghĩ có thể giúp giải quyết vấn đề (mã dưới đây) nhưng nó không có hiệu lực:
HttpContext.Current.Response.Cookies.Remove("FedAuth");
WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
string signoutUrl = (WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, authModule.Realm, null));
Response.Redirect(signoutUrl);
Chúng tôi đã triển khai bộ nhớ cache mã thông báo bảo mật vì tập hợp cookie của chúng tôi vượt quá giới hạn kích thước cookie là 4096 byte trong một số trình duyệt (safari, opera, v.v.). Nó đã được thực hiện để đáp ứng với một vấn đề cắt ngắn cookie. Chúng tôi cũng đã sử dụng mã hóa cookie dựa trên chứng chỉ. Bộ nhớ cache mã thông báo bảo mật là "phải" đối với chúng tôi và có hiệu quả mà chúng tôi đã hy vọng nhưng việc triển khai đã tạo ra ngoại lệ mới này. Vấn đề thực sự với ngoại lệ này là nó ném người dùng của chúng tôi vào vòng lặp chuyển hướng. – Jeff