private async Task GetAccessTokenAsync() { string _accessToken = null; DateTime _accessTokenExpiry = DateTime.MinValue; if (_accessToken != null && DateTime.UtcNow < _accessTokenExpiry) { return _accessToken; } using (HttpClient client = new HttpClient()) { var discoveryRequest = new DiscoveryDocumentRequest { Address = "https://staging.osipi.com/identity", Policy = new DiscoveryPolicy { Authority = "https://identity.osisoft.com", ValidateEndpoints = false, ValidateIssuerName = false } }; var discoveryResponse = await client.GetDiscoveryDocumentAsync(discoveryRequest); if (discoveryResponse.IsError) throw new InvalidOperationException(discoveryResponse.Error); var clientCredentialsTokenRequest = new ClientCredentialsTokenRequest { Address = discoveryResponse.TokenEndpoint, ClientId = "cf8611cc-d754-4a42-802c-b4500506a718", ClientSecret = "LyzBLtHl56LOskMfke9l74dk5Y4Cts4kJVxQgWSeRSQ=", Scope = "ocsapi" }; DateTime now = DateTime.UtcNow; var tokenResponse = await client.RequestClientCredentialsTokenAsync(clientCredentialsTokenRequest); if (discoveryResponse.IsError) throw new InvalidOperationException(tokenResponse.Error); if (string.IsNullOrEmpty(tokenResponse.AccessToken)) throw new InvalidOperationException("Failed to acquire Access Token"); _accessToken = tokenResponse.AccessToken; // Add a buffer of 30 seconds to the expiration delta. _accessTokenExpiry = now.AddSeconds(tokenResponse.ExpiresIn - 30); return _accessToken; } }