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

时间:2009-05-26 12:39:09

标签: c# linux windows authentication

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

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

一个注意事项 - 我正在拼命地使用固有的OS用户帐户。我不想维护自己的用户帐户存储。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

更简单(更便携)的选项可能是使用某种预共享密钥。这样,用户只需为您的程序授予一个用于对其进行签名的密钥。根据用户的相应密钥检查消息将让您知道a)用户在本地存在,以及b)消息来自用户授权的来源。你仍然有没有通用组查找的问题,但如果你不能依赖ldap,你可能需要自己做。

注意:我仍然要强调以下

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