private static CommandResult RedirectToDiscoveryService( string returnPath, SPOptions spOptions, AuthServicesUrls authServicesUrls) { string returnUrl = authServicesUrls.SignInUrl.OriginalString; if (!string.IsNullOrEmpty(returnPath)) { returnUrl += "?ReturnUrl=" + Uri.EscapeDataString(returnPath); } var redirectLocation = string.Format( CultureInfo.InvariantCulture, "{0}?entityID={1}&return={2}&returnIDParam=idp", spOptions.DiscoveryServiceUrl, Uri.EscapeDataString(spOptions.EntityId.Id), Uri.EscapeDataString(returnUrl)); return(new CommandResult() { HttpStatusCode = HttpStatusCode.SeeOther, Location = new Uri(redirectLocation) }); }
public static CommandResult Run( EntityId idpEntityId, string returnPath, HttpRequestData request, IOptions options, IDictionary <string, string> relayData) { if (options == null) { throw new ArgumentNullException(nameof(options)); } var urls = new AuthServicesUrls(request, options); IdentityProvider idp = options.Notifications.SelectIdentityProvider(idpEntityId, relayData); if (idp == null) { if (idpEntityId?.Id == null) { if (options.SPOptions.DiscoveryServiceUrl != null) { var commandResult = RedirectToDiscoveryService(returnPath, options.SPOptions, urls); options.Notifications.SignInCommandResultCreated(commandResult, relayData); return(commandResult); } idp = options.IdentityProviders.Default; } else { if (!options.IdentityProviders.TryGetValue(idpEntityId, out idp)) { throw new InvalidOperationException("Unknown idp"); } } } var returnUrl = string.IsNullOrEmpty(returnPath) ? null : new Uri(returnPath, UriKind.RelativeOrAbsolute); return(InitiateLoginToIdp(options, relayData, urls, idp, returnUrl)); }
public CommandResult Run(HttpRequestData request, IOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } var urls = new AuthServicesUrls(request, options); var metadata = options.SPOptions.CreateMetadata(urls); options.Notifications.MetadataCreated(metadata, urls); var result = new CommandResult() { Content = metadata.ToXmlString(options.SPOptions.SigningServiceCertificate), ContentType = "application/samlmetadata+xml" }; options.Notifications.MetadataCommandResultCreated(result); return(result); }
private static CommandResult InitiateLoginToIdp(IOptions options, IDictionary <string, string> relayData, AuthServicesUrls urls, IdentityProvider idp, Uri returnUrl) { var authnRequest = idp.CreateAuthenticateRequest(urls); options.Notifications.AuthenticationRequestCreated(authnRequest, idp, relayData); var commandResult = idp.Bind(authnRequest); commandResult.RequestState = new StoredRequestState( idp.EntityId, returnUrl, authnRequest.Id, relayData); commandResult.SetCookieName = "Go2." + authnRequest.RelayState; options.Notifications.SignInCommandResultCreated(commandResult, relayData); return(commandResult); }