如何将身份提供者声明值映射到Azure ACS中注册的身份提供者?

时间:2013-06-25 12:33:11

标签: azure acs

Azure允许我们通过获取:

来检索已注册身份提供者的列表
https://YourNamespace.accesscontrol.windows.net/v2/metadata/IdentityProviders.js?
    protocol=wsfederation&
    realm=YourAppRealm&
    reply_to=YourAppReturnURL&
    version=1.0

当用户登录时,我们会获得一个身份提供商声明,用于标识用于身份验证的提供商。

问题是IdentityProvider.js资源没有告诉我们将使用哪个身份提供者声明

例如:

  • Windows Live ID 使用声明值uri:WindowsLiveID
  • Google 使用声明值Google
  • ADFS 身份提供商可能会使用http://adfs.mycompany.com/adfs/services/trust
  • 等声明值

我需要能够映射到身份提供者声明值和IdentityProviders.js列出的身份提供者。

这样做的原因是我需要允许将权限分配给由特定身份提供者标识的用户。为了方便用户,我想给他们一个可供选择的身份提供者列表(即通过呈现从IdentityProviders.js获取的数据)。但是,必须使用身份提供者声明值进行实际分配,因为这是标识提供者的原因。

这可能吗?有没有解决方法?

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:1)

IdentityProviders.js不是为了这个目的,这就是你遇到这个问题的原因。最简单的解决方案是在您的应用中对这些值进行硬编码。如果您不想这样做,可以通过OData Management Service获取这些值。对于通过管理服务找到的每个身份提供程序,IdentityProvider声明值将为idp.Issuer.Name,而IdentityProviders.js中列出的值将为idp.LoginLinkName(如果未指定LoginLinkName,则为idp.DisplayName)。< / p>

答案 1 :(得分:1)

您可以使用&#34;规则组 - &gt;为身份提供商配置自己的值。 &#34;选择一个&#34; - &GT; &#34;添加&#34;,然后离开&#34;输入声明...&#34; as any / any和为每个身份提供者配置具有相同自定义声明类型的输出声明类型,例如:

"http://mycustomtype.com/usethisclaimvalue" + "uri:WindowsLiveID"

for Windows Live。

然后,您可以将此添加的声明用作应用程序内部切换操作符的源。

答案 2 :(得分:0)

上周我试图这样做,但找不到将声明中的值与IdentityProvider.js中的值相匹配的方法。我找到了具体的价值。我唯一可以建议的是一些了解映射的资源/代码。我只是在寻找一个特定的一个并且做了类似的事情:

return (HttpContext.User.Identity as System.Security.Claims.ClaimsIdentity).Claims
.First(x => x.Type ==  "http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider").Value
.Contains("Google")

我搜索数据的高低,但找不到它。如果你这样做,请提交答案,我也想知道

答案 3 :(得分:0)

我解决这个问题的方法是在ACS中为每个身份提供商创建一个自定义规则,我在其中硬编码输出值以匹配IdentityProvider.js中的名称值。这样,硬编码值在ACS中,并且在您有多个应用程序时不是特定于应用程序。

以下是我如何设置规则的示例。 - http://screencast.com/t/jfDqX0cqu