我正在构建一个小的C# MVC5应用程序,准备为其添加用户安全模块(先前我只创建了一个会话变量来测试角色)。然而,我的安全需求不符合我所见过的任何预建安全模块,例如SimpleMembership等。
以下是我的情况和需求摘要:
- 不需要密码--不允许使用用户名/密码身份验证 - 用户在Web服务器级别上使用带有客户端证书的智能卡进行身份验证--我不管理服务器,也永远看不到他们的卡 - IIS填充Request.ClientCertificate和其他一些内容,这是我拥有的所有内容 - 我的应用程序将具有专用用户帐户--不使用Windows身份验证等--因此更像是一种用户名/密码系统,而不需要输入用户名或密码 - 服务器正在使用某种形式的Windows身份验证与他们的智能卡证书对其进行身份验证,但我不能,我必须接受加载到请求集合中的证书 - 用户表存储在SQL Server中(目前...) - 由于所有应用程序数据都来自Oracle DB,并尝试获得批准将身份验证/授权表移动到其中并消除从两个数据库工作,因此最好不要使用EntityFramework,而且我们的环境中的Oracle EF不起作用,所以我改用OleDb :(
如何实施这样的方案是最好的方法?我已经开始构建三个表--用户、角色和用户角色--用户表保存(字符串)ClientCertificate的副本。进来的用户将通过提取Request.ClientCertificate进行身份验证,并查找匹配的用户记录,然后从UserRoles获取角色列表来进入应用程序。一个用户对象将存储在会话中,包含用户和角色信息,并且控制访问的控制器将使用属性要求特定角色。
(我们有另一个使用这种基本方法的应用程序,但它是Linux上的J2EE,所以我不能只重用其代码)
然而,我也开始阅读关于IIdentity和IPrincipal的内容,但我不确定是否可以使用。显然,我更喜欢使用专家设计的安全模型。那么,我应该使用从IIdentity和IPrincipal继承的自定义类来构建我的身份验证系统吗?还是应该使用其他方法?
完全有可能像SimpleMembership这样的东西可以定制以满足我的需求,但如果是这样,我不知道。
感谢您的建议,非常感谢。
以下是我的情况和需求摘要:
- 不需要密码--不允许使用用户名/密码身份验证 - 用户在Web服务器级别上使用带有客户端证书的智能卡进行身份验证--我不管理服务器,也永远看不到他们的卡 - IIS填充Request.ClientCertificate和其他一些内容,这是我拥有的所有内容 - 我的应用程序将具有专用用户帐户--不使用Windows身份验证等--因此更像是一种用户名/密码系统,而不需要输入用户名或密码 - 服务器正在使用某种形式的Windows身份验证与他们的智能卡证书对其进行身份验证,但我不能,我必须接受加载到请求集合中的证书 - 用户表存储在SQL Server中(目前...) - 由于所有应用程序数据都来自Oracle DB,并尝试获得批准将身份验证/授权表移动到其中并消除从两个数据库工作,因此最好不要使用EntityFramework,而且我们的环境中的Oracle EF不起作用,所以我改用OleDb :(
如何实施这样的方案是最好的方法?我已经开始构建三个表--用户、角色和用户角色--用户表保存(字符串)ClientCertificate的副本。进来的用户将通过提取Request.ClientCertificate进行身份验证,并查找匹配的用户记录,然后从UserRoles获取角色列表来进入应用程序。一个用户对象将存储在会话中,包含用户和角色信息,并且控制访问的控制器将使用属性要求特定角色。
(我们有另一个使用这种基本方法的应用程序,但它是Linux上的J2EE,所以我不能只重用其代码)
然而,我也开始阅读关于IIdentity和IPrincipal的内容,但我不确定是否可以使用。显然,我更喜欢使用专家设计的安全模型。那么,我应该使用从IIdentity和IPrincipal继承的自定义类来构建我的身份验证系统吗?还是应该使用其他方法?
完全有可能像SimpleMembership这样的东西可以定制以满足我的需求,但如果是这样,我不知道。
感谢您的建议,非常感谢。