检测原始依赖方应用程序

时间:2013-02-20 12:03:12

标签: acs

我想针对ACS和我的自定义STS提供程序从RP1和RP2应用程序验证用户身份。我需要知道用户来自哪个应用程序RP1或RP2。是否有可能以及如何做到这一点?

我认为如果不使用ACS,这是微不足道的,但如何使用ACS。

1 个答案:

答案 0 :(得分:1)

在联盟链中,STS理论上只知道其邻居(在这种情况下,您的IdP只知道ACS),因此您无法做到这一点。唯一正式支持的方法是在ACS中注册与两个不同的逻辑身份提供者相同的物理STS(例如http://myidp.com/rp1http://myidp.com/rp2)。

然而,在实践中,您可以采用另一种方式,但这种方式在官方上是不受支持的。以下假设您使用WS-Federation作为自定义IdP,尽管您也可以为其他协议执行类似的操作。 ACS对原始请求中的所有数据进行编码,包括使用WS-Federation响应的wctx参数中的Base64UrlEncoding编码的域和回复地址。您可以通过以下方式解码上下文:

SignInRequestMessage message = WSFederationMessage.CreateFromUri(Request.Url); 

byte[] bytes = HttpServerUtility.UrlTokenDecode(message.Context);

string decodedContext = UTF8Encoding.UTF8.GetString(bytes);

这将为您提供一组名称/值对,其中两个将是rm=<realm>&ry=<reply>,它们将是原始RP的领域和回复地址。

正如我上面提到的,请注意,这不是官方支持的,并且此上下文字符串的格式将来可能会发生变化。