我创建了带有几个回复网址的WAAD应用程序,例如
https://localhost:4444/Search
https://server/Search
https://stage.company.com/Search
https://production.company.com/Search
我正在使用WSFederationAuthencationModule.CreateSignInRequest方法并根据代码的执行位置传递回复URL
public ActionResult Federated()
{
var module = FederatedAuthentication.WSFederationAuthenticationModule;
var scheme = Request.Url.Scheme;
var replyUrl = Url.Action("Index", "Search", null, scheme);
var requestMessage = module.CreateSignInRequest(Guid.NewGuid().ToString(), replyUrl, true);
return new RedirectResult(requestMessage.RequestUrl);
}
似乎代码总是重定向到我在UI中修改的最后一个回复URL。当您修改回复网址时,它似乎首先放在清单中,只是使用了回复网址。
我的理解回复网址有缺陷吗?
答案 0 :(得分:1)
我在我的项目中使用了您的代码,但无法重现该问题。您正在使用的方法生成一个WSFed SSO请求,该请求包含在wctx参数中编码的replyUrl(通过URL解码器传递您的代码生成的下面的SSO请求,您将看到编码的ru)。
处理响应后,身份验证模块的OnAuthenticateRequest处理程序从wctx中提取replyUrl并重定向用户的代理。见http://msdn.microsoft.com/en-us/library/system.identitymodel.services.wsfederationauthenticationmodule.onauthenticaterequest(v=vs.110).aspx
您是否可以确认管道中还有SessionAuthenticationModule。 最后,您始终可以使用显式的WReply参数构建您的所有者WSFed SSO请求,该参数包含您在AAD中使用应用程序配置的其中一个回复URL。
希望这有帮助。
答案 1 :(得分:0)
对我来说有用的是在配置文件中将passiveRedirectEnabled设置为true。然后,FederatedAuthentication.WSFederationAuthenticationModule.CreateSignInRequest调用中的returnUrl参数有效!
<wsFederation passiveRedirectEnabled="true" ....>