Google Oauth 2.0 Web API redirect_uri_mismatch - Google перенаправляет неправильный URL - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь использовать логин Google API для листов Google в проекте asp.net c #, но получаю redirect_uri_mismatch ошибку 400. Я даже не установил этот URL перенаправления, на который Google перенаправляет.Я установил URL перенаправления http://127.0.0.1:63092/login.aspx, но Google перенаправляет на http://127.0.0.1:13557/authorize/ неправильный порт и неправильную веб-страницу.Мой Credential.json также не имеет ничего похожего на /authorize/, как вы можете видеть ниже.

{
  "web": {
    "client_id": "client_idxxxxxxx.apps.googleusercontent.com",
    "project_id": "app-xxxxx",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_secret": "secret_xxxxxxxx",
    "redirect_uris": [ "http://127.0.0.1:63092/login.aspx" ],
    "javascript_origins": [ "http://127.0.0.1:63092" ]
  }
}

При каждой попытке он меняет порт на 127.0.0.1 и перенаправляет на /authorize/, в чем может быть проблемаВот?Что я делаю не так?

enter image description here

Мой код

static string[] Scopes = { SheetsService.Scope.Spreadsheets };
static string ApplicationName = "My App";
static string thisDir = System.Web.Hosting.HostingEnvironment.MapPath("~/");
protected void Button1_Click(object sender, EventArgs e)
{
    UserCredential credential;
    using (var stream =
    new FileStream(thisDir + "credential.json", FileMode.Open, FileAccess.Read))
    {
        string credPath = thisDir + "token.json";
        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            Scopes,
            "user",
            CancellationToken.None,
            new FileDataStore(credPath, true)).Result;
    }

    var service = new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    String spreadsheetId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    String range = "Sheet1";
    SpreadsheetsResource.ValuesResource.GetRequest request =
            service.Spreadsheets.Values.Get(spreadsheetId, range);
    ValueRange response = request.Execute();
    IList<IList<Object>> values = response.Values;
    if (values != null && values.Count > 0)
    {
        Console.WriteLine("Name, Major");
        foreach (var row in values)
        {
            Console.WriteLine("{0}, {1}", row[0], row[4]);
        }
    }
    else
    {
        Console.WriteLine("No data found.");
    }
}

1 Ответ

1 голос
/ 21 мая 2019

Google предлагает несколько типов учетных данных для использования различными приложениями. В вашем случае вы используете учетные данные, предназначенные для веб-серверов, а не учетные данные, предназначенные для установленных приложений (запущенных локально на чьем-либо рабочем столе).

В консоли учетных данных Google выберите «Другое» в качестве типа приложения. Загрузите новые учетные данные и повторите попытку.

...