4

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

4 回答 4

1

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

于 2013-06-27T18:50:19.417 回答
1

您可以使用“规则组->“选择一个”->“添加”为身份提供者配置自己的值,然后将“输入声明...”保留为任意/任意,并使用相同的自定义声明类型配置输出声明类型每个身份提供者,例如:

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

适用于 Windows Live。

然后,您可以使用此添加的声明作为应用程序内切换运算符的来源。

于 2013-07-01T06:06:45.547 回答
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")

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

于 2013-06-25T15:03:53.313 回答
0

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

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

于 2013-07-02T20:54:42.850 回答