Google "GoogleWebAuthorizationBroker" показывает ошибку перенаправления несоответствие URI - PullRequest
1 голос
/ 13 марта 2019

Я делаю это в MVC (C #). Я хочу получить доступ к календарю пользователей Google, поэтому я указал кнопку «Доступ к календарю». Когда пользователь нажимает кнопку ниже, вызывается код, чтобы получить токены (и сохранить) для доступа к данным календаря.

 UserCredential credential;
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    new ClientSecrets
                    {
                        ClientId = "xxxxxx.apps.googleusercontent.com",
                        ClientSecret = "FxxxxxxxxxZ"
                    },
                    Scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath)).Result;

Когда этот метод выполняется, мы должны быть перенаправлены на экран согласия, вместо этого я получаю ошибку как shown in this image

но URI перенаправления, который он показывает, я никогда не указывал в консоли. Это URI перенаправления, который я указал в консоли проекта Google. console settings Что-то я делаю не так? Как правильно перенаправить на экран разрешений?

1 Ответ

1 голос
/ 13 марта 2019

Перенаправление URI

URI перенаправления в вашем запросе http://127.0.1:59693/authorize вы не добавили его в поле Авторизованный Uris перенаправления.

Вы не можете просто добавить любой URI перенаправления. Клиентская библиотека создает этот URL самостоятельно. его всегда

host:port/authorize

Тип приложения

Существует несколько типов клиентов, которые можно создавать. Эти клиенты предназначены для работы с различными типами приложений. Код, используемый для связи с этими клиентами, также отличается.

  • установленное приложение - приложение, установленное на компьютере пользователя
  • веб-приложение - приложение, размещенное на веб-сервере, подключенном к пользователю через веб-браузер.

Установленное приложение

Вы используете GoogleWebAuthorizationBroker.AuthorizeAsync, он предназначен для использования с установленными приложениями. Окно браузера откроется на самой машине. Если вы попытаетесь разместить его на веб-сервере, браузер попытается открыть его на сервере и не будет отображаться пользователю.

Веб-приложения

вы должны следовать веб-приложениям и использовать GoogleAuthorizationCodeFlow

using System;
using System.Web.Mvc;

using Google.Apis.Auth.OAuth2;
using Google.Apis.Auth.OAuth2.Flows;
using Google.Apis.Auth.OAuth2.Mvc;
using Google.Apis.Drive.v2;
using Google.Apis.Util.Store;

namespace Google.Apis.Sample.MVC4
{
    public class AppFlowMetadata : FlowMetadata
    {
        private static readonly IAuthorizationCodeFlow flow =
            new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
                {
                    ClientSecrets = new ClientSecrets
                    {
                        ClientId = "PUT_CLIENT_ID_HERE",
                        ClientSecret = "PUT_CLIENT_SECRET_HERE"
                    },
                    Scopes = new[] { DriveService.Scope.Drive },
                    DataStore = new FileDataStore("Drive.Api.Auth.Store")
                });

        public override string GetUserId(Controller controller)
        {
            // In this sample we use the session to store the user identifiers.
            // That's not the best practice, because you should have a logic to identify
            // a user. You might want to use "OpenID Connect".
            // You can read more about the protocol in the following link:
            // https://developers.google.com/accounts/docs/OAuth2Login.
            var user = controller.Session["user"];
            if (user == null)
            {
                user = Guid.NewGuid();
                controller.Session["user"] = user;
            }
            return user.ToString();

        }

        public override IAuthorizationCodeFlow Flow
        {
            get { return flow; }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...