public ProcessFederationRequest ( ) : System.Web.Mvc.ActionResult | ||
return | System.Web.Mvc.ActionResult |
public ActionResult ProcessFederationRequest()
{
var action = Request.QueryString[WSFederationConstants.Parameters.Action];
try
{
switch (action)
{
case WSFederationConstants.Actions.SignIn:
{
var requestMessage = (SignInRequestMessage)WSFederationMessage.CreateFromUri(Request.Url);
if (User != null && User.Identity != null && User.Identity.IsAuthenticated)
{
var sts = new MultiProtocolSecurityTokenService(MultiProtocolSecurityTokenServiceConfiguration.Current);
var responseMessage = FederatedPassiveSecurityTokenServiceOperations.ProcessSignInRequest(requestMessage, User, sts);
responseMessage.Write(Response.Output);
Response.Flush();
Response.End();
HttpContext.ApplicationInstance.CompleteRequest();
}
else
{
// user not authenticated yet, look for whr, if not there go to HomeRealmDiscovery page
this.CreateFederationContext();
if (string.IsNullOrEmpty(this.Request.QueryString[WSFederationConstants.Parameters.HomeRealm]))
{
return this.RedirectToAction("HomeRealmDiscovery");
}
else
{
return this.Authenticate();
}
}
}
break;
case WSFederationConstants.Actions.SignOut:
{
var requestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri(Request.Url);
FederatedPassiveSecurityTokenServiceOperations.ProcessSignOutRequest(requestMessage, User, requestMessage.Reply, HttpContext.ApplicationInstance.Response);
}
break;
default:
throw new InvalidOperationException(
String.Format(
CultureInfo.InvariantCulture,
"The action '{0}' (Request.QueryString['{1}']) is unexpected. Expected actions are: '{2}' or '{3}'.",
String.IsNullOrEmpty(action) ? "<EMPTY>" : action,
WSFederationConstants.Parameters.Action,
WSFederationConstants.Actions.SignIn,
WSFederationConstants.Actions.SignOut));
}
}
catch (Exception exception)
{
throw new Exception("An unexpected error occurred when processing the request. See inner exception for details.", exception);
}
return null;
}
public void ShouldRenderTheIdentityProviderSelectorViewWhenNoIdentityProviderIdentifierProvided() { var protocolHandler = new Mock<IProtocolHandler>(); var defaultProtocolDiscovery = new Mock<IProtocolDiscovery>(); var federationContext = new Mock<IFederationContext>(); var configuration = new Mock<IConfigurationRepository>(); defaultProtocolDiscovery.Setup(s => s.RetrieveProtocolHandler(It.IsAny<ClaimProvider>())) .Returns(() => protocolHandler.Object); var controller = new AuthenticationController(defaultProtocolDiscovery.Object, federationContext.Object, configuration.Object); controller.SetFakeControllerContext(); controller.Request.SetupRequestUrl("https://somedomain.com/?wa=wsignin1.0&wtrealm=blah"); controller.HttpContext.SetAnonymousUser(); var result = controller.ProcessFederationRequest(); protocolHandler.Verify(p => p.ProcessSignInRequest(It.IsAny<Scope>(), It.IsAny<HttpContextBase>()), Times.Never()); Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult)); Assert.AreEqual("HomeRealmDiscovery", (((RedirectToRouteResult)result)).RouteValues["action"]); }