C# “ASP.NET实现”;充当;使用Windows身份验证和自定义角色提供程序时的功能
我正在尝试为ASP.NET应用程序实现“作为”功能,同时使用Windows身份验证和自定义角色提供程序。基本上,我希望能够做到的是:C# “ASP.NET实现”;充当;使用Windows身份验证和自定义角色提供程序时的功能,c#,asp.net,windows-authentication,impersonation,roleprovider,C#,Asp.net,Windows Authentication,Impersonation,Roleprovider,我正在尝试为ASP.NET应用程序实现“作为”功能,同时使用Windows身份验证和自定义角色提供程序。基本上,我希望能够做到的是: 使用Windows Auth获取当前用户的域帐户,以验证他们是否是经批准的域用户 使用自定义角色提供程序从SQL Server数据库获取权限信息 实现功能以允许应用程序的管理员能够“充当”另一个用户,而不需要他们作为该用户实际登录到应用程序 我试图实现的场景是,应用程序管理员试图帮助用户解决问题,并单击“作为”按钮以该用户的身份查看应用程序。因此,角色提供程序
- 使用Windows Auth获取当前用户的域帐户,以验证他们是否是经批准的域用户
- 使用自定义角色提供程序从SQL Server数据库获取权限信息
- 实现功能以允许应用程序的管理员能够“充当”另一个用户,而不需要他们作为该用户实际登录到应用程序
提前谢谢 查看我对类似问题的回答 其要点是: 我做这件事的方式,承认有点粗鲁,就是有一个 我的数据库中的模拟表,其中包含 正在进行模拟的用户及其所属用户的登录 我想冒充 我添加了一些覆盖代码,这样当用户第一次访问 页面(它使用Windows身份验证),它将检查 用户在表中设置了模拟,然后放置此用户id 在会话状态的对象中。如果没有模仿,那就是 将实际用户id放置在此同一对象中 为了防止我像处理用户数据一样处理用户数据,有 此对象中有两个属性,一个用于登录名,即 由系统用于内容定制,另一个称为 NameForLog,用于记录任何操作。我所做的一切 将以我的身份登录 网站上显示用户自定义内容的所有区域都可以查看 此会话对象,因此他们将始终使用模拟ID和 因此,请始终向我显示用户看到的内容。超越第一 页面和日志代码,它甚至不知道是我,是吗 处理 对于您的场景,您可以实现角色提供程序并覆盖GetRolesForUser以返回模拟用户的角色以及一些角色,这些角色将允许模拟用户访问模拟功能以关闭模拟功能
您甚至可以将模拟用户的角色与模拟用户的角色一起返回,以便让管理员用户能够访问他们自己的所有功能以及他们正在模拟的用户,这完全取决于这将在多大程度上影响该功能在特定场景中的可用性。我已经实现了类似的功能……虽然与您的场景不完全相同,但非常接近
GetRoles(loggedinUserid)
GetRoles(int loggedinUserId)
方法然后确定用户的类型,即是管理员还是非管理员。如果是admin,则从cookie中获取ClientID。将loggedInUserID、typdofuser和ClientId传递给存储过程,该存储过程将返回admin的所有角色+该ClientId的所有角色,并返回给角色提供程序希望这能有所帮助。感谢您的反馈,并对响应的长时间延迟表示抱歉。我知道我可以编写代码来解决这个问题,但我曾希望有一种方法,我仍然可以利用内置的安全性,这样我就可以对所有菜单和位置安全性进行修剪,而不必输入自定义代码来处理这些部分。基本上,我希望我可以避免将自定义安全代码写入单独的页面等来处理此问题,尽管这似乎不太可能。感谢您的反馈。我想我在问题中提到,饼干是我想要避免的东西,因为它们比我想要的更持久。也就是说,我不希望此“作为”功能在浏览器窗口/会话中持续存在。我希望它是特定于当前的