跨程序发送自定义ACS声明的最佳方法是什么?

时间:2012-02-22 16:57:50

标签: c# azure claims-based-identity acs

我有两个程序,一个“登录”程序,它使用外国STS(谷歌,Facebook等)登录用户并返回用户拥有的安全访问类型。然后,我想将该信息发送到一个单独的程序,该程序接受该安全访问并根据该程序为用户授予权限。

发送这些信息的最佳方式是什么?

我已经阅读了有关自定义授权管理器服务的一些信息,但我不确定这是否是我需要的。是否可以只发布安全信息,web.config将其转换为声明?我应该制作一个新令牌并发送吗?

我绝望地迷失了。如果有人可以在网络上的某个地方提供一个有用的教程,那将是非常感激的(因为我的谷歌搜索只发现了冗长的文章,要么做得比我需要的要少得多或者更少)。

具体的代码片段将成为我的一天。

谢谢!

编辑:我试图避免将登录系统变成STS。但我开始觉得我需要。 STS和依赖方之间有一些中间点吗?像一个可以产生自己主张的依赖方?

1 个答案:

答案 0 :(得分:1)

您有几种选择:

  1. 最简单的是ClaimsAuthorizationManager,它可能就是你要找的东西。 http://msdn.microsoft.com/en-us/library/ee748497.aspx CAM是ASP.NET身份验证管道中的一个步骤,它在您的应用程序验证从ACS传入的安全令牌后立即运行。您可以在此处定义自定义授权逻辑,还可以向IClaimsPrincipal添加其他声明,这些声明将传递给您的应用程序。您可以在不同的依赖方应用程序共享的库中实现CAM,而不是在服务中集中授权逻辑。

  2. 如果您的授权规则很简单,即您没有查询任何外部用户属性存储,那么一个选项就是使用ACS声明转换规则来执行此操作。然后您的应用程序将直接使用ACS发出的令牌。 http://msdn.microsoft.com/en-us/library/gg185955.aspx

  3. 但是,如果你的架构绝对需要一个单独的登录服务来消耗令牌并使用用户属性填充新的令牌等,那么它将需要是一个STS。建立自己的STS可能很棘手,但有预制的STS可用来做到这一点。例如,如果您的应用程序位于AD域中,ADFS 2.0将是一个理想的选择,因为它与AD和ACS紧密集成,并且具有强大的声明转换功能。