Tôi gặp sự cố xảy ra trong một môi trường sản xuất đơn lẻ, rất dễ bị trầy xước.ContextSessionSecurityToken bị ghi đè khi người dùng thứ hai đăng nhập
Bạn có hai người dùng, A và B. Người dùng A đăng nhập, mọi thứ đều hoạt động tốt. Người dùng B đăng nhập và sau khi người dùng B đăng nhập, người dùng A hiện có cùng mã thông báo bảo mật như người dùng B.
Thiết lập WIF của chúng tôi khá chuẩn, chúng tôi tiêm một số yêu cầu tùy chỉnh trên mã thông báo, nhưng mọi thứ khác có tiêu chuẩn như cách mã thông báo được tạo và lưu trữ (được xử lý bởi WIF).
Cảm thấy như tôi có thể chạy vào một số trường hợp cạnh lạ với WIF rằng tôi không quen thuộc với
Cập nhật: Cả A và B có thể được trên các máy riêng biệt, hoặc các trình duyệt riêng biệt trên cùng một máy.
đâu chúng tôi có mã thông báo khi yêu cầu một dịch vụ
if (HttpContext.Current == null)
return null;
if (HttpContext.Current.Cache == null)
return null;
if (FederatedAuthentication.SessionAuthenticationModule == null)
return null;
if (FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken == null)
return null;
var sessionToken = FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken;
if (sessionToken.ClaimsPrincipal == null)
throw new InvalidOperationException("The ClaimsPrincipal property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities == null)
throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities.Count == 0)
throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object has no identities");
if (sessionToken.ClaimsPrincipal.Identities[0] == null)
throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities[0].Claims == null)
throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object as a null Claims property");
return TokenUtility.GetDelegatedToken(IssuedTokenTypes.UserProfile | IssuedTokenTypes.AccountPermissions, sessionToken);
Nếu tôi thêm đăng nhập ở đây tôi có thể nhìn thấy sessionToken.ClaimsPrincipal.Identity.Name
khác với tên nó được coi là vào thời điểm này.
Bạn có nghĩa là Nhật ký trên PC, B sử dụng cùng một PC, cùng một phiên trình duyệt hoặc cái gì? – nzpcmad
Không thể nếu trang web được duyệt từ hai máy/trình duyệt khác nhau. Các thẻ được đăng lên trang web và được lưu giữ trong cookie. Không có cách nào để điều này được chia sẻ giữa những người dùng trừ khi bạn làm điều gì đó không đúng cách như lưu trữ dữ liệu trong các biến tĩnh. –
@nzpcmad bạn có thể sử dụng hai trình duyệt khác nhau trên cùng một máy. Bạn có thể ở trên hai máy riêng biệt. – jcolebrand