处理跨平台用户身份验证和授权的策略

时间:2011-01-11 11:32:23

标签: c++ authentication architecture cross-platform authorization

我对在跨平台分布式系统中可以使用哪些策略来处理用户身份验证和授权感兴趣。我希望能够将系统中的操作标记为属于某个用户,并且只允许某些用户执行某些操作。

背景 该系统目前仅在Windows下使用,其中由用户发起的动作当前仅被标记为来自用户的特定机器。一个动作基本上涉及使用cpu进行一些计算并返回结果。

目前没有任何授权,也没有用户身份验证(或计算机之间)。系统作为具有低权限的服务运行(使用NETWORK SERVICE帐户)。数据不敏感,允许本地网络上的所有用户使用系统内容。

系统可以部署在同构Windows域设置以及没有域控制器的工作组中,也可以与域的混合以及不属于域的一堆工作计算机一起部署。

问题

为了向系统添加功能,例如收集每个用户的使用情况统计信息或显示谁正在使用计算机,有必要跟踪单个用户。除此之外,如果某些用户只允许执行某些操作(例如更改系统的某些设置),则还需要某种形式的授权。

我非常了解Windows的这种做法,并且在Windows中使用内置的身份验证和授权功能,在同类Windows域设置中添加此类功能非常简单。这也消除了将仅对此特定系统有效的特殊帐户分配给系统的需要 - 一旦用户正常登录,就可以完成所有身份验证和授权,而无需任何额外的用户交互。

但是如果系统应该能够在Mac OSX上运行怎么办?还是Linux?如果它应该在Windows域中的某些用户和OSX上的其他用户以及运行Linux的某些工作机器的混合环境中运行,该怎么办? (实际系统可以移植到所有这些系统并处理跨平台通信等)。我对在这些平台上处理身份验证和授权的方式知之甚少,并且不知道在平台之间进行交互时如何实现这一点。

在像这样的分布式系统中,是否有任何好的策略可用于跨平台用户身份验证和授权?请注意这里“跨平台”的双重用途 - 既可以为不同的平台编译程序,也可以在平台之间进行交互。

我将问题标记为C ++,因为这是系统编写的语言,但我愿意接受任何可以使用C ++进行交互的内容。任何想法(包括野性建筑变化)都是受欢迎的!

更新

能够实现的有趣内容的一个例子:

用户A登录到计算机1,这是一台Windows计算机。

用户A打开系统的管理界面,选择机器2(Linux系统)并调整设置。系统验证用户A实际上是否具有足够的权限以允许执行此操作。

由于A在他/她登录时已经验证了他的身份,因此最好允许他/她更改此设置,而无需提供额外的凭据。

1 个答案:

答案 0 :(得分:3)

您应该使用SAML令牌进行基于声明的身份验证,这些令牌可跨平台工作。

在Windows端,有一个库:Windows Identity Foundation。

请参阅:http://msdn.microsoft.com/en-us/security/aa570351