Войти в сервисы Google без участия пользователя - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь создать службу приложения для запуска на облачном сервере (AppHarbor), которую я не обрабатываю напрямую, как консольное приложение C #. По сути, это Telegram Bot , которому требуется доступ к Gmail и Календарю Google. При локальном запуске он предлагает пользователю через браузер первый раз предоставить доступ к учетной записи.

К сожалению, на сервере я не могу предоставить такой доступ, поэтому мне нужен способ авторизации (аутентификации) напрямую, без необходимости авторизации.

Я видел возможность использовать Сервисную учетную запись , но, к сожалению, для настройки пользовательских разрешений требуется GSuite , и для этого требуется оплата, которую мне нужно избегать.

using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
{
    // The file token.json stores the user's access and refresh tokens, and is created
    // automatically when the authorization flow completes for the first time.
    string credPath = "token.json";
    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        Scopes,
        "user",
        System.Threading.CancellationToken.None,
        new FileDataStore(credPath, true)).Result;
}

Я сгенерировал свой json-файл со всеми необходимыми настройками и секретами, но он по-прежнему требует взаимодействия с пользователем.

Есть ли способ сделать это без приглашения пользователя?

1 Ответ

0 голосов
/ 25 января 2019

ПОЛЬЗОВАТЕЛЬ

Термин «пользователь» обозначает владельца данных или учетной записи, к которой вы хотите получить доступ.Для доступа к данным, принадлежащим учетной записи пользователя.У вас должно быть разрешение соответствующего пользователя.

Сервисная учетная запись

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

Токен обновления Oauth2

Я делал что-то подобное в прошлом.То, что вам нужно, это два приложения.Тот, который ваши пользователи могут запускать для аутентификации вашего приложения и отправки учетных данных на ваш сервер, а второй - это консольное приложение, которое у вас есть сейчас. Oauth

Пользовательское приложение

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

Консольное приложение

Затем ваше консольное приложение должно использовать эти токены обновления для запроса нового токена доступа и получения доступа к данным пользователей, когда это необходимо.

Чтобы загрузить этот токен обновления, вам нужно создать собственную реализацию IDataStore.Код, который вы сейчас используете, использует FileDataStore, в котором хранятся данные кредитоспособности в% appdata%, которые вам нужно будет перегрузить, чтобы он мог читать откуда угодно, когда пользовательское приложение сохраняло данные.У меня есть несколько примеров здесь datastore.cs gist

Подтверждение приложения

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

...