public static OAuth2TokenInfo CreateFromJson(string json) { var jsonObj = JsonConvert.DeserializeObject <Json>(json); var token = new OAuth2TokenInfo(); token.AccessToken = jsonObj.access_token; token.ExpiresIn = jsonObj.expires_in; token.RefreshToken = jsonObj.refresh_token; token.IdToken = jsonObj.id_token; return(token); }
public async Task <OAuth2TokenInfo> GetTokenInfoAsync(OAuth2Credential credential, string redirectUri, string authorizationCode) { var queryParams = new Dictionary <string, string>(); queryParams.Add("code", authorizationCode); queryParams.Add("client_id", credential.ClientId); queryParams.Add("client_secret", credential.ClientSecret); queryParams.Add("redirect_uri", redirectUri); queryParams.Add("grant_type", "authorization_code"); var queryString = _net.GetQueryString(queryParams); var request = _net.CreateHttp(TokenEndpoint); request.Method = "POST"; request.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; request.Headers[HttpRequestHeader.ContentLength] = Encoding.UTF8.GetByteCount(queryString).ToString(); using (var stream = await request.GetRequestStreamAsync().ConfigureAwait(false)) using (var writer = new StreamWriter(stream)) { await writer.WriteAsync(queryString).ConfigureAwait(false); } DateTime issuedTime = DateTime.UtcNow; using (var response = await request.GetResponseAsync().ConfigureAwait(false)) { var jsonContent = await _net.GetResponseTextAsync(response).ConfigureAwait(false); if (response.StatusCode == HttpStatusCode.OK) { var tokenInfo = OAuth2TokenInfo.CreateFromJson(jsonContent); tokenInfo.IssuedTime = issuedTime; return(tokenInfo); } else { throw new WebException(jsonContent, WebExceptionStatus.ReceiveFailure); } } }