多种操作系统用户authentication技术的方法和build议

我正在寻找如何validation用户/密码组合的build议,并validation多个不同操作系统上的组关联。 基本上我有一个在MS Visual Studio C#和Mono C#中工作的C#应用​​程序,我需要添加一个authentication机制来支持Windows,Linux和MacOSX。

对于Windows,我编写了一个快速的C#interop来使用Windows的LogonUser API。 这是行之有效的,但不适用于Windows以外的系统。 我的最终目标是在所有平台(Windows,Linux和MacOSX)上运行相同的代码,尽可能less依赖于操作系统的#ifdefing。

一个说明 – 我正在拼命地使用固有的操作系​​统用户帐户。 我宁愿不维护我自己的用户帐户存储。

任何想法或build议的方法,用户身份validation技术等是受欢迎的。

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

每个系统都不同地处理本地认证 正如@Darnell提到的,你可能需要为你的认证编写一个接口,并隐藏系统特定的后端。

如果您需要在多个系统中拥有相同的用户帐户,则用于用户信息的ldap和用于身份验证的Kerberos是唯一完全支持的跨平台方式来处理它。

没有“克服”你的应用程序,并坚持只运行在相同的环境中,没有通用的身份验证方法。 另外,LDAP实际上是查询组信息的唯一便携式方式。

一个更简单的(更便携的)选项可能是使用某种预共享密钥。 通过这种方式,用户将只授权你的程序,给它一个签名的密钥。 根据用户相应的密钥检查消息会让你知道:a)用户在本地存在; b)消息来自用户授权的源。 您仍然存在没有通用组查询的问题,但如果您不能依赖ldap,则可能需要自行完成。

注:我还是要强调以下几点

我强烈建议不要在用户的邮件中使用某人的密码,即使这需要您维护自己的用户/密码数据库。 你会绕过当地的安全范式,开放系统给更多的安全风险。 如果系统正在使用kerberos / ActiveDirectory,那么这一点就更加重要了,这里已经采取了很大的措施来确保用户的密码永远不会通过线路传输。 以DBMS为例 – 其中大多数不绑定本地用户数据库(至少默认情况下),并实现自己的用户认证机制。 看看安全性如何在MySQL或PostgreSQL中工作。