在 .NET MVC (3) 上构建 SAML2 服务提供程序 Web 应用程序。我们使用 ComponentSpace 的 SAML2 库进行身份验证,而不是Shibboleth SP。以下是相关的控制器逻辑:
public class SignOnController : Controller
{
// constructor-inject _services
[HttpPost]
public ActionResult SendAuthnRequest(string userName, string returnUrl)
{
// this users ComponentSpace internally to push user to IdP
_services.SamlServiceProvider.SendAuthnRequest(args);
return new EmptyResult();
}
[HttpPost]
public ActionResult ReceiveAuthnResponse()
{
var samlResponse = _services.SamleServiceProvider
.ReceiveSamlResponse(args);
// ...
return Redirect(samlResponse.RelayResourceUrl ?? defaultUrl);
}
}
最终,用户登陆中继 url 或默认登录页面。但是,当他们单击链接,然后单击返回按钮时,浏览器会返回到 Shibboleth IdP 服务器上的错误页面。在那之后,浏览器的前进和后退按钮最终变得毫无用处。
我在上述任何一种方法中做错了吗?发送时我应该返回 View() 而不是 EmptyResult() 吗?是否有某种方法可以重置浏览器历史记录以防止重复回发回 IdP?这是我可以在 ComponentSpace 的实现中配置的东西吗?