繁体   English   中英

多种OS用户身份验证技术的方法和建议

[英]Approaches and recommendations for multiple OS user authentication techniques

我正在寻找有关如何验证用户/密码组合以及在多个不同的操作系统上验证组关联的建议。 基本上,我有一个同时在MS Visual Studio C#和Mono C#中都可以使用的C#应用​​程序,我需要向其添加身份验证机制以支持Windows,Linux和MacOSX。

对于Windows,我编写了一个快速的C#互操作以使用仅Windows的LogonUser API。 这运作良好,但不适用于Windows以外的系统。 我的最终目标是在所有平台(Windows,Linux和MacOSX)上运行同一组代码,并尽可能减少与OS相关的#ifdefing。

注意事项–我正拼命使用固有的OS用户帐户。 我不想保留自己的用户帐户存储。

欢迎对方法,用户身份验证技术等有任何想法或建议。

我不确定身份验证在Linux和Mac上如何工作,但是我想到的第一件事是实现IAuthenticator接口并具有特定于操作系统的身份验证器类。 然后,您可以通过Dependecy Injection手动切换到适当的类,或者可以在运行时动态切换到适当的类...但是您的应用程序应该能够以某种方式识别当前正在运行的操作系统。

每个系统处理本地身份验证的方式不同。 如@Darnell所述,您可能需要编写一个用于身份验证的接口,并隐藏系统特定的后端。

如果您需要在多个系统上使用相同的用户帐户,则ldap可以获取用户信息,而kerberos可以进行身份​​验证是唯一完全支持的跨平台处理方式。

缺少对应用程序进行“内核化”,并坚持只在等效环境中运行,没有通用的身份验证方法。 此外,LDAP确实是查询组信息的唯一可移植方式。

一个更简单(更便于移植)的选项可能是使用某种预共享密钥。 这样,用户将通过给程序一个用于签名消息的密钥来仅授权您的程序。 将消息与用户的相应密钥进行对照,将使您知道a)用户在本地存在,b)消息来自用户授权的来源。 您仍然有无法进行通用组查找的问题,但是如果您不能依靠ldap,则可能需要自己进行查找。

注意:我仍然要强调以下几点

我强烈建议您永远不要在消息中使用某人的密码,即使这需要您维护自己的用户/密码数据库。 您将规避本地安全范式,并向更多的安全风险开放系统。 如果系统使用的是kerberos / ActiveDirectory,则这一点尤为重要,在其中已花了很长的时间来确保永远不会通过网络传输用户密码。 以DBMS为例-它们中的大多数不绑定到本地用户数据库(至少默认情况下),而是实现自己的用户身份验证机制。 查看安全性在MySQL或PostgreSQL中的工作方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM