Как подключиться к Google Talk, используя agsxmpp и oauth2?

Я занимаюсь разработкой приложения для мини чата, которое использует протокол xmpp и google talk server. Я обнаружил, что Google не позволяет подключаться к серверам gtalk, если приложение менее безопасно, то есть не использует OAuth 2.0. Я искал код для подключения к gtalk с использованием библиотеки agsxmpp, но ничего не смог найти. Документация по протоколу Google oauth2 содержит несколько примеров, показывающих, как использовать API Google с oauth2. Но, как я понял, все примеры требуют определения, к какому API мы пытаемся подключиться. Как в следующем примере:

using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Books.v1;
using Google.Apis.Books.v1.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;

namespace Books.ListMyLibrary
{
    /// <summary>
    /// Sample which demonstrates how to use the Books API.
    /// https://code.google.com/apis/books/docs/v1/getting_started.html
    /// <summary>
    internal class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Console.WriteLine("Books API Sample: List MyLibrary");
            Console.WriteLine("================================");
            try
            {
                new Program().Run().Wait();
            }
            catch (AggregateException ex)
            {
                foreach (var e in ex.InnerExceptions)
                {
                    Console.WriteLine("ERROR: " + e.Message);
                }
            }
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }

        private async Task Run()
        {
            UserCredential credential;
            using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
            {
                credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    new[] { BooksService.Scope.Books },
                    "user", CancellationToken.None, new FileDataStore("Books.ListMyLibrary"));
            }

            // Create the service.
            var service = new BooksService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Books API Sample",
                });

            var bookshelves = await service.Mylibrary.Bookshelves.List().ExecuteAsync();
            ...
        }
    }
}

Здесь, как вы видите в строке

credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                        GoogleClientSecrets.Load(stream).Secrets,
                        new[] { BooksService.Scope.Books },
                        "user", CancellationToken.None, new FileDataStore("Books.ListMyLibrary")); 

Они указали BooksService.Scope.Books, другими словами, они явно показывают, к какой службе они пытаются подключиться. Но в списке API-адресов Google не было службы Google Talk. Поэтому я запутался, как безопасно подключиться к серверу gtalk, используя библиотеку agsxmpp и протокол Google oauth2. Может кто-нибудь показать мне пример того, как это сделать?

1 ответ

Вот здесь документы Google Talks в Google Developers: https://developers.google.com/talk/

Я верю, что в будущем он будет полностью заменен Hangouts, который не поддерживает XMPP.

Область, которая вам нужна для Google Talks, https://www.googleapis.com/auth/googletalk,

Подробнее https://developers.google.com/talk/jep_extensions/oauth.

Замените объем книги на это:

credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                        GoogleClientSecrets.Load(stream).Secrets,
                        new[] { "https://www.googleapis.com/auth/googletalk" },
                        "user", CancellationToken.None, new FileDataStore("Books.ListMyLibrary")); 

Возможно, вы захотите изменить FileDataStore тоже...

Другие вопросы по тегам