private async Task <HttpClient> GetHttpClientAsync() { var cookieContainer = new CookieContainer(); #pragma warning disable CA2000 // Dispose objects before losing scope HttpMessageHandler handler = new SocketsHttpHandler { UseCookies = true, AllowAutoRedirect = false, CookieContainer = cookieContainer, MaxConnectionsPerServer = 25 }; if (!string.IsNullOrEmpty(ProjectResource.ApiGatewayHost) && !string.IsNullOrEmpty(ProjectResource.ApiGatewayPolicy)) { // since this is executed on every access to sharepoint, only log at debug level Logger.Debug("Using {@ApiGateway} for {Resource}", new { Host = ProjectResource.ApiGatewayHost, Policy = ProjectResource.ApiGatewayPolicy }, ProjectResource.Resource); handler = new ApiGatewayHandler(handler, ProjectResource.ApiGatewayHost, ProjectResource.ApiGatewayPolicy); } #pragma warning restore CA2000 // Dispose objects before losing scope HttpClient httpClient = new HttpClient(handler); httpClient.BaseAddress = ProjectResource.Resource; httpClient.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json;odata=verbose")); // simplify the parameters var resource = ProjectResource.Resource; var relyingPartyIdentifier = ProjectResource.RelyingPartyIdentifier; var username = ProjectResource.Username; var password = ProjectResource.Password; var authorizationUrl = ProjectResource.AuthorizationUri.ToString(); string samlToken = await _samlAuthenticator.GetStsSamlTokenAsync(relyingPartyIdentifier, username, password, authorizationUrl); string apiGatewayHost = ProjectResource.ApiGatewayHost; string apiGatewayPolicy = ProjectResource.ApiGatewayPolicy; await _samlAuthenticator.GetSharepointFedAuthCookieAsync(resource, samlToken, httpClient, cookieContainer, apiGatewayHost, apiGatewayPolicy); return(httpClient); }
private async Task <Tuple <ProjectResource, Exception> > CheckSamlAccessTokenAsync(ProjectConfiguration project, ProjectResource resource) { string relyingParty = resource.RelyingPartyIdentifier; string username = resource.Username; string password = resource.Password; string stsUri = resource.AuthorizationUri.ToString(); try { // dont cache the tokens string token = await _samlAuthenticator.GetStsSamlTokenAsync(relyingParty, username, password, stsUri, cached : false); return(Tuple.Create(resource, _noException)); } catch (Exception e) { return(Tuple.Create(resource, e)); } }
private async Task <Tuple <ProjectResource, Exception> > GetSamlAccessTokenAsync(ProjectResource resource) { if (resource == null) { throw new ArgumentNullException(nameof(resource)); } string relyingParty = resource.RelyingPartyIdentifier; string username = resource.Username; string password = resource.Password; string stsUri = resource.AuthorizationUri.ToString(); try { var token = await _samlAuthenticator.GetStsSamlTokenAsync(relyingParty, username, password, stsUri, cached : true); return(Tuple.Create(resource, _noException)); } catch (Exception e) { return(Tuple.Create(resource, e)); } }