在WSFed登录后,将身份提供商的参数传递回依赖方

时间:2014-03-17 17:17:54

标签: acs ws-federation

登录后有没有办法将值传回依赖方?例如在querystring

背景

我们要做的是告知依赖方用户采取了哪些操作,例如:登录或注册,以便依赖方可以向用户显示适当的确认消息。由于依赖方可能会链接到“注册”页面,但随后注册用户不会登录,因此依赖方不应显示“感谢加入我们”通知面板。

我尝试将&lastaction=signup添加到returnUrl,但在通过Azure ACS发布表单时会丢失。

下一次尝试是尝试将lastaction添加到wreply,如下所示:

WSFederationMessage message;
WSFederationMessage.TryCreateFromUri(uri, out message);
var signinMessage = wsFederationMessage as SignInRequestMessage;
if (signinMessage != null)
{    
    signinMessage.Reply += "?lastaction=hello";
    ...

在Fiddler中我可以看到ACS的下一个帖子发布到https://xxxxx.accesscontrol.windows.net/v2/wsfederation?lastaction=hello 但是最后的动作没有传递给我的依赖方。

1 个答案:

答案 0 :(得分:2)

我们遇到了一个相关的问题:我们想让RP知道用户在登录时使用了哪些身份验证方法。我们通过使用命名空间创建一个新的“系统”声明解决了这个问题,并将信息放在那里。

在我们的TokenService实现中,在AddSecurityClaims方法中:

 claimsIdentity.AddClaim(
            new Claim(
                String.Format("{0}/{1}", WellKnownConfiguration.TokenService.ClaimsNamespace,
                    ClaimsAuthenticationMethods), ((int) userAuthenticationMethods)));

<强>更新 你提到过你想过使用cookies。在那种情况下,我会做以下事情。我将实现设置cookie(例如,在注册页面时),然后再创建一个“action”,它将返回该cookie的值。当应用程序使用凭据获取POST请求时,您将使用返回URL执行重定向(立即)到该中继操作。然后,该操作将附加cookie的值并调用原始RP,但会自动执行该操作,然后正确显示视图。

将其视为cookie代理。总而言之,过程如下:

  1. 用户点击RP,操作需要身份验证
  2. RP根据WS-Federation
  3. 将用户重定向到STS
  4. STS发出令牌,并将cookie添加到自己的域
  5. RP获取经过身份验证的用户,重定向到STS Cookie Reader
  6. STS重定向到RP的第二个可以正确处理登录的屏幕
  7. 总而言之,还有一个跳,但就像我说的那样,它可能足够快,用户不会注意到和/或关心。