protected override string BuildChallengeUrl(AuthenticationProperties properties, string redirectUri) { log.LogDebug("BuildChallengeUrl called with redirectUri = " + redirectUri); var scope = FormatScope(); var state = Options.StateDataFormat.Protect(properties); //var queryBuilder = new QueryBuilder() //{ // { "client_id", Options.ClientId }, // { "scope", scope }, // { "response_type", "code" }, // { "redirect_uri", redirectUri }, // { "state", state }, //}; var tenantFbOptions = new MultiTenantMicrosoftOptionsResolver(Options, siteResolver, siteRepo, multiTenantOptions); string resolvedRedirectUri = tenantFbOptions.ResolveRedirectUrl(redirectUri); log.LogDebug("resolvedRedirectUri was " + resolvedRedirectUri); var queryBuilder = new QueryBuilder() { { "client_id", tenantFbOptions.ClientId }, { "scope", scope }, { "response_type", "code" }, { "redirect_uri", resolvedRedirectUri }, { "state", state }, }; return(Options.AuthorizationEndpoint + queryBuilder.ToString()); }
protected override async Task <OAuthTokenResponse> ExchangeCodeAsync(string code, string redirectUri) { log.LogDebug("ExchangeCodeAsync called with code " + code + " redirectUri " + redirectUri); //var tokenRequestParameters = new Dictionary<string, string>() //{ // { "client_id", Options.ClientId }, // { "redirect_uri", redirectUri }, // { "client_secret", Options.ClientSecret }, // { "code", code }, // { "grant_type", "authorization_code" }, //}; var currentSite = await GetSite(); var tenantFbOptions = new MultiTenantMicrosoftOptionsResolver( Options, currentSite, multiTenantOptions); var tokenRequestParameters = new Dictionary <string, string>() { { "client_id", tenantFbOptions.ClientId }, { "redirect_uri", tenantFbOptions.ResolveRedirectUrl(redirectUri) }, { "client_secret", tenantFbOptions.ClientSecret }, { "code", code }, { "grant_type", "authorization_code" }, }; var requestContent = new FormUrlEncodedContent(tokenRequestParameters); var requestMessage = new HttpRequestMessage(HttpMethod.Post, Options.TokenEndpoint); requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); requestMessage.Content = requestContent; var response = await Backchannel.SendAsync(requestMessage, Context.RequestAborted); response.EnsureSuccessStatusCode(); var payload = JObject.Parse(await response.Content.ReadAsStringAsync()); return(new OAuthTokenResponse(payload)); }