1

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

背景:

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

我尝试添加&lastaction=signupreturnUrl但是当通过 Azure ACS 发布表单时,它会丢失。

下一次尝试是尝试添加lastactionwreply,如下所示:

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

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

4

1 回答 1

2

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

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

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

更新 您提到您考虑过使用 cookie。在这种情况下,我会执行以下操作。我将实现设置一个cookie(例如,在注册页面时),然后再创建一个返回该cookie 值的“动作”。当应用程序收到带有凭据的 POST 请求时,您将(立即)执行重定向到带有返回 url 的中继操作。然后,该操作将附加 cookie 的值并调用原始 RP,但这是一个自定义操作,然后将正确显示视图。

将其视为 cookie 代理。总结一下,流程如下:

  1. 用户点击 RP,操作需要身份验证
  2. RP 根据 WS-Federation 将用户重定向到 STS
  3. STS 发出一个令牌,同时也将一个 cookie 添加到它自己的域中
  4. RP 获取认证用户,重定向到 STS Cookie Reader
  5. STS 重定向到可以正确处理登录的 RP 的第二个屏幕

总而言之,再跳一跳,但就像我说的那样,它可能足够快,用户不会注意到和/或关心。

于 2014-04-11T12:28:42.447 回答