public OAuth2Tokens RefreshToken(string refreshToken)
 {
     using (var client = new WebClient()) {
         var form = HttpUtility.ParseQueryString(String.Empty);
         form["grant_type"]    = "refresh_token";
         form["refresh_token"] = refreshToken;
         client.AuthorizeBasic(clientId, clientSecret);
         var response = client.UploadValues(tokenUri, form);
         var json     = Encoding.UTF8.GetString(response);
         var tokens   = JsonConvert.DeserializeObject <OAuth2Tokens>(json, JsonSettings);
         return(tokens);
     }
 }
 public OAuth2Tokens ExchangeCodeForTokens(string code, Uri redirectUri)
 {
     using (var client = new WebClient()) {
         var form = HttpUtility.ParseQueryString(String.Empty);
         form["code"]         = code;
         form["redirect_uri"] = redirectUri.AbsoluteUri;
         form["grant_type"]   = "authorization_code";
         client.AuthorizeBasic(clientId, clientSecret);
         byte[] response = client.UploadValues(tokenUri, form);
         string json     = Encoding.UTF8.GetString(response);
         var    tokens   = JsonConvert.DeserializeObject <OAuth2Tokens>(json, JsonSettings);
         return(tokens);
     }
 }