protected override Task ApplyResponseChallengeAsync() { if (Response.StatusCode != 401) { return(Task.FromResult <object>(null)); } AuthenticationResponseChallenge challenge = Helper.LookupChallenge(Options.AuthenticationType, Options.AuthenticationMode); if (challenge != null) { string baseUri = Request.Scheme + Uri.SchemeDelimiter + Request.Host + Request.PathBase; string currentUri = baseUri + Request.Path + Request.QueryString; string redirectUri = baseUri + Options.CallbackPath; AuthenticationProperties properties = challenge.Properties; if (string.IsNullOrEmpty(properties.RedirectUri)) { properties.RedirectUri = currentUri; } // OAuth2 10.12 CSRF GenerateCorrelationId(Options.CookieManager, properties); var queryStrings = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); queryStrings.Add("response_type", "code"); queryStrings.Add("client_id", Options.ClientId); queryStrings.Add("redirect_uri", redirectUri); var acrValues = string.Join(" ", Options.AcrValues); if (!string.IsNullOrEmpty(acrValues)) { queryStrings.Add("acr_values", acrValues); } // space separated string scope = string.Join(" ", Options.Scope); if (string.IsNullOrEmpty(scope)) { scope = "openid email"; } AddQueryString(queryStrings, properties, "scope", scope); AddQueryString(queryStrings, properties, "access_type", Options.AccessType); AddQueryString(queryStrings, properties, "approval_prompt"); AddQueryString(queryStrings, properties, "prompt"); AddQueryString(queryStrings, properties, "login_hint"); AddQueryString(queryStrings, properties, "include_granted_scopes"); string state = Options.StateDataFormat.Protect(properties); queryStrings.Add("state", state); string authorizationEndpoint = WebUtilities.AddQueryString(Options.AuthorizationEndpoint, queryStrings); var redirectContext = new NortonApplyRedirectContext( Context, Options, properties, authorizationEndpoint); Options.Provider.ApplyRedirect(redirectContext); } return(Task.FromResult <object>(null)); }
/// <summary> /// Called when a Challenge causes a redirect to authorize endpoint in the Norton OAuth 2.0 middleware /// </summary> /// <param name="context">Contains redirect URI and <see cref="AuthenticationProperties"/> of the challenge </param> public virtual void ApplyRedirect(NortonApplyRedirectContext context) { OnApplyRedirect(context); }