403 may also be caused by TLS issues. To verify, you should check the text of the WebException.Response object.
catch (WebException ex)
{
if (ex.Response != null)
{
var response = ex.Response;
var dataStream = response.GetResponseStream();
var reader = new StreamReader(dataStream);
var details = reader.ReadToEnd();
}
}
If it is TLS then try adding this to your code to force TLS1.2.
For .net4:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
For .net4.5 or later:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;