/// <summary> /// Calls live.com authorization server with the <see cref="OAuthRequestParameters"/> passed in, deserializes the response and returns back OAuth tokens. /// </summary> /// <param name="oAuthParameters">OAuth parameters for authorization server call</param> /// <exception cref="OAuthTokenRequestException">Thrown if tokens can't be received</exception> /// <returns>OAuth tokens</returns> public async Task <OAuthTokens> GetAccessTokensAsync(OAuthRequestParameters oAuthParameters, bool requireLiveConnect, string tenant, List <KeyValuePair <string, string> > additionalParams) { OAuthEndpointType endpointType = GetOAuthEndpointType(Environment, requireLiveConnect); var values = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("client_id", oAuthParameters.ClientId), new KeyValuePair <string, string>("grant_type", oAuthParameters.GrantType), new KeyValuePair <string, string>(oAuthParameters.GrantParamName, oAuthParameters.GrantValue), new KeyValuePair <string, string>("scope", EndpointUrls[endpointType].Scope) }; if (oAuthParameters.RedirectUri != null) { values.Add(new KeyValuePair <string, string>("redirect_uri", oAuthParameters.RedirectUri.ToString())); } if (!string.IsNullOrEmpty(oAuthParameters.ClientSecret)) { values.Add(new KeyValuePair <string, string>("client_secret", oAuthParameters.ClientSecret)); } if (additionalParams != null) { values.AddRange(additionalParams); } var OAuthTokenUrl = EndpointUrls[endpointType].OAuthTokenUrl; if (endpointType == OAuthEndpointType.ProductionMSIdentityV2 && !(string.IsNullOrEmpty(tenant))) { OAuthTokenUrl = OAuthTokenUrl.Replace("common", tenant); } var response = await _httpService.PostAsync(new Uri(OAuthTokenUrl), values, TimeSpan.FromSeconds(100)).ConfigureAwait(false); var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); if (response.IsSuccessStatusCode) { var fragmentsSer = new DataContractJsonSerializer(typeof(Dictionary <string, string>), new DataContractJsonSerializerSettings() { UseSimpleDictionaryFormat = true }); var fragments = (Dictionary <string, string>)fragmentsSer.ReadObject(stream); return(new OAuthTokens(fragments["access_token"], Convert.ToInt32(fragments["expires_in"]), fragments["refresh_token"], fragments)); } else { var serializer = new DataContractJsonSerializer(typeof(OAuthErrorDetailsContract)); var errorDetailsContract = (OAuthErrorDetailsContract)serializer.ReadObject(stream); throw new OAuthTokenRequestException(ErrorMessages.OAuthError, new OAuthErrorDetails { Description = errorDetailsContract.Description, Error = errorDetailsContract.Error }); } }
/// <summary> /// Calls live.com authorization server with the <see cref="OAuthRequestParameters"/> passed in, deserializes the response and returns back OAuth tokens. /// </summary> /// <param name="oAuthParameters">OAuth parameters for authorization server call</param> /// <exception cref="OAuthTokenRequestException">Thrown if tokens can't be received</exception> /// <returns>OAuth tokens</returns> public async Task <OAuthTokens> GetAccessTokensAsync(OAuthRequestParameters oAuthParameters) { var values = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("client_id", oAuthParameters.ClientId), new KeyValuePair <string, string>("grant_type", oAuthParameters.GrantType), new KeyValuePair <string, string>(oAuthParameters.GrantParamName, oAuthParameters.GrantValue), new KeyValuePair <string, string>("redirect_uri", oAuthParameters.RedirectUri.ToString()) }; if (!string.IsNullOrEmpty(oAuthParameters.ClientSecret)) { values.Add(new KeyValuePair <string, string>("client_secret", oAuthParameters.ClientSecret)); } var response = await _httpService.PostAsync(new Uri("https://login.live.com/oauth20_token.srf"), values).ConfigureAwait(false); var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); if (response.IsSuccessStatusCode) { var serializer = new DataContractJsonSerializer(typeof(OAuthTokensContract)); var tokensContract = (OAuthTokensContract)serializer.ReadObject(stream); return(new OAuthTokens { AccessToken = tokensContract.AccessToken, RefreshToken = tokensContract.RefreshToken, AccessTokenExpiresInSeconds = tokensContract.AccessTokenExpiresInSeconds }); } else { var serializer = new DataContractJsonSerializer(typeof(OAuthErrorDetailsContract)); var errorDetailsContract = (OAuthErrorDetailsContract)serializer.ReadObject(stream); throw new OAuthTokenRequestException(ErrorMessages.OAuthError, new OAuthErrorDetails { Description = errorDetailsContract.Description, Error = errorDetailsContract.Error }); } }
/// <summary> /// Calls live.com authorization server with the <see cref="OAuthRequestParameters"/> passed in, deserializes the response and returns back OAuth tokens. /// </summary> /// <param name="oAuthParameters">OAuth parameters for authorization server call</param> /// <exception cref="OAuthTokenRequestException">Thrown if tokens can't be received</exception> /// <returns>OAuth tokens</returns> public async Task <OAuthTokens> GetAccessTokensAsync(OAuthRequestParameters oAuthParameters) { var values = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>("client_id", oAuthParameters.ClientId), new KeyValuePair <string, string>("grant_type", oAuthParameters.GrantType), new KeyValuePair <string, string>(oAuthParameters.GrantParamName, oAuthParameters.GrantValue), new KeyValuePair <string, string>("redirect_uri", oAuthParameters.RedirectUri.ToString()), new KeyValuePair <string, string>("scope", "bingads.manage") }; if (!string.IsNullOrEmpty(oAuthParameters.ClientSecret)) { values.Add(new KeyValuePair <string, string>("client_secret", oAuthParameters.ClientSecret)); } var response = await _httpService.PostAsync(new Uri(EndpointUrls[Environment].OAuthTokenUrl), values, TimeSpan.FromSeconds(100)).ConfigureAwait(false); var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); if (response.IsSuccessStatusCode) { var fragmentsSer = new DataContractJsonSerializer(typeof(Dictionary <string, string>), new DataContractJsonSerializerSettings() { UseSimpleDictionaryFormat = true }); var fragments = (Dictionary <string, string>)fragmentsSer.ReadObject(stream); return(new OAuthTokens(fragments["access_token"], Convert.ToInt32(fragments["expires_in"]), fragments["refresh_token"], fragments)); } else { var serializer = new DataContractJsonSerializer(typeof(OAuthErrorDetailsContract)); var errorDetailsContract = (OAuthErrorDetailsContract)serializer.ReadObject(stream); throw new OAuthTokenRequestException(ErrorMessages.OAuthError, new OAuthErrorDetails { Description = errorDetailsContract.Description, Error = errorDetailsContract.Error }); } }
/// <summary> /// Calls live.com authorization server with the <see cref="OAuthRequestParameters"/> passed in, deserializes the response and returns back OAuth tokens. /// </summary> /// <param name="oAuthParameters">OAuth parameters for authorization server call</param> /// <exception cref="OAuthTokenRequestException">Thrown if tokens can't be received</exception> /// <returns>OAuth tokens</returns> public async Task<OAuthTokens> GetAccessTokensAsync(OAuthRequestParameters oAuthParameters) { var values = new List<KeyValuePair<string, string>>() { new KeyValuePair<string, string>("client_id", oAuthParameters.ClientId), new KeyValuePair<string, string>("grant_type", oAuthParameters.GrantType), new KeyValuePair<string, string>(oAuthParameters.GrantParamName, oAuthParameters.GrantValue), new KeyValuePair<string, string>("redirect_uri", oAuthParameters.RedirectUri.ToString()) }; if (!string.IsNullOrEmpty(oAuthParameters.ClientSecret)) { values.Add(new KeyValuePair<string, string>("client_secret", oAuthParameters.ClientSecret)); } var response = await _httpService.PostAsync(new Uri("https://login.live.com/oauth20_token.srf"), values).ConfigureAwait(false); var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); if (response.IsSuccessStatusCode) { var serializer = new DataContractJsonSerializer(typeof(OAuthTokensContract)); var tokensContract = (OAuthTokensContract)serializer.ReadObject(stream); return new OAuthTokens(tokensContract.AccessToken, tokensContract.AccessTokenExpiresInSeconds, tokensContract.RefreshToken); } else { var serializer = new DataContractJsonSerializer(typeof(OAuthErrorDetailsContract)); var errorDetailsContract = (OAuthErrorDetailsContract)serializer.ReadObject(stream); throw new OAuthTokenRequestException(ErrorMessages.OAuthError, new OAuthErrorDetails { Description = errorDetailsContract.Description, Error = errorDetailsContract.Error }); } }