【问题标题】:How do I add claims to an ACS Service Identity如何向 ACS 服务标识添加声明
【发布时间】:2012-12-09 03:59:21
【问题描述】:

我什至不确定这是否可行,但我无法在任何 kb、帮助或文档中找到明确的答案。

我有一个通过 ACS 保护的 WebAPI。应用程序使用服务身份通过 ACS 和我的 WebAPI 进行身份验证以允许访问。我想做的是为服务身份提出声明以识别个人身份。例如,服务标识 A 提供类型和 id,服务标识 B 为相同的声明类型提供不同的值,然后我的 WebAPI 可以根据声明值授权特定调用。

目前,我通过使用输出声明和通过 ACS 门户设置声明值的规则组实现了这一点,但是规则组应用于访问依赖应用程序(我的 WebAPI)的所有服务身份,我需要的是拥有该服务每个身份都有不同的声明值。

由于所有通信都是服务到服务,因此我计划使用 ACS 而不是其他身份提供商,例如 Live/Microsoft Account 或 Google。但是目前我能得出的唯一结论是实施我自己的自定义 STS 来提供声明值。

我希望我已经清楚地解释了我的场景,任何人都可以提供帮助,我如何为各个服务标识设置声明值,还是应该以不同的方式这样做?

谢谢

安德鲁

【问题讨论】:

  • 您没有添加其他声明。仍然只有一种索赔类型。是否可以添加额外的声明或者“nameidentifier”是唯一的一个 ACS 服务标识支持?

标签: azure identity claims-based-identity acs


【解决方案1】:

我在圣诞节/新年假期离开办公室之前设法解决了这个问题,并想说明我是如何为其他可能觉得有用的人解决这个问题的。

我从问题中退了回来,并以全新的视角重新审视它。由于我的应用程序基于服务身份进行身份验证,并且身份验证在调用我的服务的服务之间进行,因此不会有大量服务身份需要进行身份验证。因此,根据我的要求,我可以利用规则组根据提供的声明提供声明。

我所有的 Windows Azure 访问控制服务标识都显示了一个名称标识声明(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name 标识),因此对于每个新的服务标识,我都在 ACS 门户中创建了一个新的规则组:

创建此新规则组后,我选择添加如下规则。我选择 InputClaim Issuer 是访问控制服务,因为 ACS 正在提供令牌以对我的服务进行身份验证。接下来选择我希望收到的输入声明类型,并且我在 If 语句中检查它。因此,在下面的示例中,如果提供的 nameidentifier 声明的值为 StackOverflow(我期望的服务标识的名称),那么我希望使用 ACS 返回的令牌返回值为 UK 的 Country 输出声明。我还添加了额外的规则,以便在需要时添加更多的输出声明。这使我能够为相应的服务标识返回正确的声明和值。

最后,我进入依赖方应用程序列表并选择了我的依赖方应用程序(我的服务)并选择了我创建的新规则组。

这种方法解决了我的问题,使我现在能够从提供给我的休息服务的令牌中读取声明,并根据提供的值做出决定。我开始寻找一种更复杂的方法,当我退后一步并清楚地查看需求时,我发现我能够通过核心 ACS 功能实现我的需求。希望这可以帮助其他有类似要求的人。

【讨论】:

  • 感谢您提供的详细信息,这确实帮助我解决了几乎相同的情况。
【解决方案2】:

IIRC 应用程序创建自己的令牌并使用 cert/symm 密钥对其进行签名 - 该令牌中的声明然后成为规则引擎中的输入...

..但已经有一段时间了;)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多