Stack Exchange
Google authentication not working when deployed to azure
I am authenticating using Google. The below code works fine when I run it locally whereas it throws an error when I deploy it to azure:
 HttpWebRequest webRequest = 
(HttpWebRequest)WebRequest.Create("https://accounts.google.com/o/oauth2/token");
                    webRequest.Method = "POST";
                    Parameters = "code=" + code + "&client_id=" + googleplus_client_id + "&client_secret=" + googleplus_client_secret + "&redirect_uri=" + googleplus_redirect_url + "&grant_type=authorization_code";
                    byte[] byteArray = Encoding.UTF8.GetBytes(Parameters);
                    webRequest.ContentType = "application/x-www-form-urlencoded";
                    webRequest.ContentLength = byteArray.Length;
                    Stream postStream = webRequest.GetRequestStream();
                    postStream.Write(byteArray, 0, byteArray.Length);
                    postStream.Close();
                    WebResponse response = webRequest.GetResponse();//**Error Occurs here**

I also tried
var values = new NameValueCollection();
var resp = client.UploadValues("https://accounts.google.com/o/oauth2/token?" + Parameters, values );
var responseString = Encoding.Default.GetString(resp);
serStatus = JsonConvert.DeserializeObject<GooglePlusAccessToken>(responseString);

And again this worked locally, but when I deployed it to azure it didn't work
The redirect url is like below:
https://sample.com/Home/User?code=4/uQB37PKUFlID8dSLFFTsYLEDdHWWOprWaMtpa6YasdxxxxxxxxxxH8OQVxg3UZMoDc&scope=email%20profile%20https://www.googleapis.com/auth/userinfo.profile%20https://www.googleapis.com/auth/userinfo.email

I get the below error message and stack trace


[WebException: The remote server returned an error: (400) Bad
  Request.]    System.Net.HttpWebRequest.GetResponse() +1399
  SomeSln.Controllers.HomeController.User() in
  C:\CodePath\Controllers\HomeController.cs:63    lambda_method(Closure
  , ControllerBase , Object[] ) +62
  System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase
  controller, Object[] parameters) +14
  System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext
  controllerContext, IDictionary2 parameters) +169
  System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext
  controllerContext, ActionDescriptor actionDescriptor, IDictionary`2
  parameters) +27
  System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult
  asyncResult, ActionInvocation innerInvokeState) +22
  System.Web.Mvc.Async.WrappedAsyncResult2.CallEndDelegate(IAsyncResult
  asyncResult) +29
  System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49
  System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult
  asyncResult) +32
  System.Web.Mvc.Async.AsyncInvocationWithFilters.b__3d()
  +50    System.Web.Mvc.Async.<>c__DisplayClass46.b__3f()
  +228    System.Web.Mvc.Async.<>c__DisplayClass33.b__32(IAsyncResult asyncResult) +10
  System.Web.Mvc.Async.WrappedAsyncResult1.CallEndDelegate(IAsyncResult
  asyncResult) +10
  System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49
  System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult
  asyncResult) +34


can you include the full exception stack please

sure, I've added it now

any chance instead of posting images you could post the raw string values?  it makes it a pain to read and I think it is preferred option in SO.  thanks

Also please check if the 400 returned from remote server contains a message/body

@JohnB done John

It might be related to the redirect URL not being in the approved list at the Google side, whereas the localhost used when you run locally is.
Take a look at OAuth 2.0 >> Web applications (ASP.NET MVC) for more information.
Hope it helps!

I have added the redirect URL and its getting redirected after the login. But fetching the token part doesn't seem to work in Azure

I suggest you try and follow the Authorization Code Flow example from the link I posted (as it seems from your code you are using authorization code flow) and see what's different.
