public ActionResult AuthenticateCallback(AuthenticateCallBackInputModel inputModel) { #region Input Model Validation if (!ModelState.IsValid) { throw new ArgumentException( "Some binding errors occured. This means at least one Request value (eg. form post or querystring parameter) provided is invalid. Generally, we need a ProviderName as a string."); } if (string.IsNullOrEmpty(inputModel.ProviderKey)) { throw new ArgumentException( "ProviderKey value missing. You need to supply a valid provider key so we know where to redirect the user Eg. providerkey=google."); } #endregion var previousRedirectUrl = string.IsNullOrEmpty(_cache[SessionKeyRedirectToProviderUrl]) ? "N.A." : _cache[SessionKeyRedirectToProviderUrl]; TraceSource.TraceInformation("Previous Redirect Url: " + previousRedirectUrl); #region Deserialize Tokens, etc. // Retrieve any (previously) serialized access token stuff. (eg. public/private keys and state). // TODO: Check if this is an access token or an auth token thingy-thing. TraceSource.TraceVerbose("Retrieving (local serializaed) AccessToken, State and RedirectToUrl."); var state = _cache[SessionKeyState]; var redirectToUrl = _cache[SessionKeyReturnToUrl]; #endregion // Lets now start to setup the view model. var model = new AuthenticateCallbackData(); #region Retrieve the User Information try { // Which provider did we just authenticate with? var provider = GetAuthenticationProvider(inputModel.ProviderKey); model.ProviderName = provider.Name; // Where do we return to, after we've authenticated? var callbackUri = GenerateCallbackUri(provider.Name, _configurationOptions?.BasePath); // Grab the user information. model.AuthenticatedClient = provider.AuthenticateClient(Request.QueryString, state, callbackUri); } catch (Exception exception) { TraceSource.TraceError(exception.Message); model.Exception = exception; } #endregion // Do we have an optional redirect resource? Usually a previous referer? if (redirectToUrl != null) { TraceSource.TraceVerbose("Found redirectToUrl: " + redirectToUrl); model.ReturnUrl = redirectToUrl; } // Finally! We can hand over the logic to the consumer to do whatever they want. TraceSource.TraceVerbose("About to execute your custom callback provider logic."); return _callbackProvider.Process(HttpContext, model); }
public ActionResult AuthenticateCallback(AuthenticateCallBackInputModel inputModel) { #region Input Model Validation if (!ModelState.IsValid) { throw new ArgumentException( "Some binding errors occured. This means at least one Request value (eg. form post or querystring parameter) provided is invalid. Generally, we need a ProviderName as a string."); } if (string.IsNullOrEmpty(inputModel.ProviderKey)) { throw new ArgumentException( "ProviderKey value missing. You need to supply a valid provider key so we know where to redirect the user Eg. providerkey=google."); } #endregion var previousRedirectUrl = string.IsNullOrEmpty((string)Session[SessionKeyRedirectToProviderUrl]) ? "N.A." : (string)Session[SessionKeyRedirectToProviderUrl]; TraceSource.TraceInformation("Previous Redirect Url: " + previousRedirectUrl); #region Deserialize Tokens, etc. // Retrieve any (previously) serialized access token stuff. (eg. public/private keys and state). // TODO: Check if this is an access token or an auth token thingy-thing. TraceSource.TraceVerbose("Retrieving (local serializaed) AccessToken, State and RedirectToUrl."); var state = Session[SessionKeyState] as string; var redirectToUrl = Session[SessionKeyReturnToUrl] as string; #endregion // Lets now start to setup the view model. var model = new AuthenticateCallbackData(); #region Retrieve the User Information try { // Which provider did we just authenticate with? var provider = GetAuthenticationProvider(inputModel.ProviderKey); // Where do we return to, after we've authenticated? var callbackUri = GenerateCallbackUri(provider.Name); // Grab the user information. model.AuthenticatedClient = provider.AuthenticateClient(Request.QueryString, state, callbackUri); } catch (Exception exception) { TraceSource.TraceError(exception.Message); model.Exception = exception; } #endregion // Do we have an optional redirect resource? Usually a previous referer? if (redirectToUrl != null) { TraceSource.TraceVerbose("Found redirectToUrl: " + redirectToUrl); model.ReturnUrl = redirectToUrl; } // Finally! We can hand over the logic to the consumer to do whatever they want. TraceSource.TraceVerbose("About to execute your custom callback provider logic."); return(_callbackProvider.Process(HttpContext, model)); }