Google API Autentication - ошибка redirect_uri_mismatch

Я пытаюсь аутентифицировать свое веб-приложение с помощью Google Plus API. В консоли разработчика Google в разделе "Учетные данные для моего Cliend Id for Web Application".

Я добавляю следующий uri перенаправления: http://localhost:50883/oauth/add_oauth_token

Когда я запускаю свое приложение, я получаю следующую ошибку:

400. That’s an error.

Error: redirect_uri_mismatch

Application: SID3

You can email the developer of this application at: [email protected]

The redirect URI in the request: http://localhost:55404/authorize/ did not match a registered   redirect URI.

Learn more

Request Details
from_login=1
response_type=code
scope=https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email    https://www.googleapis.com/auth/userinfo.profile
access_type=offline
redirect_uri=http://localhost:55404/authorize/
as=-45fed094242eac62
pli=1
client_id=389029010035-knoo3a2445r77pirc06h8fhgdc5q0dsv.apps.googleusercontent.com
authuser=0
hl=es

Итак, по какой-то причине Google меняет мой uri перенаправления на порт 55404, почему? Большое спасибо и всего наилучшего

Это код:

protected void LoginToGooglePlus(object sender, ImageClickEventArgs e)
    {

        PlusService service = null;
        UserCredential credential = null;

            string[] scopes = new string[] {PlusService.Scope.PlusLogin, PlusService.Scope.UserinfoEmail,
 PlusService.Scope.UserinfoProfile};
            // here is where we Request the user to give us access, or use the Refresh Token that was previously stored in %AppData%
           try
        {
            // here is where we Request the user to give us access, or use the Refresh Token that was previously stored in %AppData%
            UserCredential credentials;
            using (var stream = new FileStream("C:\\Users\\Usuario\\Documents\\Visual Studio 2010\\Projects\\WebApplication1\\WebApplication1\\client_secret.json", FileMode.Open, FileAccess.Read))
            {

                credentials= GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets, scopes, Environment.UserName, CancellationToken.None, new FileDataStore("WebApplication1")).Result;
            }
        }
        catch (Exception ex)
        {
            //If the user hits cancel you wont get access.
            if (ex.InnerException.Message.IndexOf("access_denied") != -1)
            {
                Console.WriteLine("User declined access");
                Console.ReadLine();
                return;
            }
            else
            {
                Console.WriteLine("Unknown Authentication Error:" + ex.Message);
                Console.ReadLine();
                return;
            }
        }

        // Now we create a Google service. All of our requests will be run though this.
        service = new PlusService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "SID3",
        });




}

Файл json, который я использую, это:

{"web":{"auth_uri":"https://accounts.google.com/o/oauth2/auth","client_secret":"jpkVDaaMjlLCHGh67DJ9Zv19","token_uri":"https://accounts.google.com/o/oauth2/token","client_email":"389029010035-knoo3a2445r77pirc06h8fhgdc5q0dsv@developer.gserviceaccount.com","redirect_uris":["http://localhost:50880/Paneles.aspx"],"client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/389029010035-knoo3a2445r77pirc06h8fhgdc5q0dsv@developer.gserviceaccount.com","client_id":"389029010035-knoo3a2445r77pirc06h8fhgdc5q0dsv.apps.googleusercontent.com","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs"}}

person zoit    schedule 26.11.2014    source источник
comment
Я не думаю, что Google меняет ваш порт. Я думаю, что ваш сеанс отладки asp меняет ваш порт. msdn.microsoft.com/en-us/library /ms178109(v=vs.100).aspx URI перенаправления должен быть таким же, как тот, на который вы звоните.   -  person DaImTo    schedule 26.11.2014
comment
Привет, Линда, я поставил его на статический порт и ничего, не работает, поэтому я не знаю, что делать. Спасибо   -  person zoit    schedule 26.11.2014
comment
я думаю, вам нужно будет опубликовать свой код. и попробуйте добавить полный файл в uri перенаправления localhost: 50883 / oauth / add_oauth_token / test.aspx < / а>   -  person DaImTo    schedule 26.11.2014


Ответы (2)


Я решил ту же проблему, просто изменив DataStore на null.

credentials= GoogleWebAuthorizationBroker.AuthorizeAsync(
    GoogleClientSecrets.Load(stream).Secrets,
    scopes,
    Environment.UserName,
    CancellationToken.None,
    null // <-- here
    ).Result;

Не знаю почему, но он останавливает случайные махинации с портами. Я также должен добавить, что в моем случае это просто решило одну проблему, так как мне нужно было опубликовать свое приложение в Интернете, где это решение было просто неправильным. Если кому-то нужна онлайн-версия (asp.net 4.5 MVC 5), вы можете использовать код здесь.

person Shiran Dror    schedule 23.01.2016

URL-адрес перенаправления API и URL-адрес перенаправления вашего приложения должны быть одинаковыми .... Например (если URL-адрес вашего приложения похож на этот localhost: 55404 / authorize / и необходимо добавить тот же URL-адрес в URL-адрес перенаправления API localhost: 55404 / authorize /)

person Charles    schedule 30.11.2014
comment
У меня такая же проблема с использованием Google Calendar API v3, и это не решение, поскольку IIS всегда меняет порт. - person Cheshire Cat; 11.03.2015