在一個新項目中,我打算分別使用ActiveDirectoryMembershipProvider和SqlRoleProvider來提供身份驗證和授權。ActiveDirectoryMembershipProvider和SqlRoleProvider:維護?
有一點我不清楚的是如何處理維護 - 當已經登錄並被分配角色的用戶從Active Directory中刪除時,如何刪除SqlRoleProvider使用的映射表中的孤立記錄?我相信這是aspnet_UsersInRoles表。
可以定期查詢禁用用戶的Active Directory,然後遍歷該列表調用Roles.RemoveUserFromRoles(UserId,Roles.GetRolesForUser(UserId)),其中UserId也位於aspnet_UsersInRoles中。我想,對於一個大型組織來說,非常緩慢。
或者,對於UsersInRoles中的每個distint UserId,查詢ActiveDirectory並確保userAccountControl屬性的位掩碼不表示帳戶已禁用。對於大量的應用程序用戶來說,效率也很低。
一個更醜陋,但更有效的方法是存儲最後一次登錄日期,並定期清除未登錄六個月的用戶的角色關聯。這可能會導致頭痛。
我很樂意聽取建議。