2

我有这种情况。

  1. RP 与被动联合为 2。
  2. 用于用户/密码身份验证的自定义 STS

    一切正常。至此,用户点击登录链接,进入禁区,触发联邦安全,出现登录界面。它会提示他编写凭据,然后处理请求等。

    现在我需要在同一页面(默认页面)上创建登录(用户/密码)文本框。如何在不重定向到登录页面的情况下实现联合登录操作?我应该(或可以)使用 FederatedPassiveSignIn 控件吗?如果是这样,怎么做?

4

2 回答 2

1

如果 IsAutheticated 为 false,您可以在未受保护的登录页面上显示登录框,然后将消息发送到自定义 STS 登录页面,并使用加密的凭据或其他任何内容,然后在后台登录并重定向回您的应用程序。以正常方式使用令牌。

但是,如果用户未通过身份验证并将登录页面后面的页面添加为书签,他们将被重定向到 STS。

于 2012-11-21T19:09:35.623 回答
0

对于任何感兴趣的人(我怀疑确实有人),我已经通过 - 基本上 - 模拟登录页面的作用来解决它。

// makes credentials validation, and creates IClaimsPrincipal with the acquired claims
IClaimsPrincipal principal = LoginHelper.SignIn(editEmail.Value, editPassword.Value);

// retrieves the instance of the STS (in this case my custom STS)
TrustedSecurityTokenService service = (TrustedSecurityTokenService) TrustedSecurityTokenServiceConfiguration.Current.CreateSecurityTokenService();

// creates the request manually to point to my original page (or whatever page you desire)
SignInRequestMessage request = FederatedAuthentication.WSFederationAuthenticationModule.CreateSignInRequest(Guid.NewGuid().ToString(), "http://page/i/want/to/go/after/the/validation.aspx", true);

// processes first the request...
SignInResponseMessage response = FederatedPassiveSecurityTokenServiceOperations.ProcessSignInRequest(request, principal, service);

// ...then the response is processed, and redirected to URL above
FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse(response, Response);

这创建了 cookie,并且主体不是 IsAuthenticated。好像它是由登录页面处理的(至少它似乎按预期工作)。

于 2012-11-22T17:27:42.193 回答