Как подключиться к 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 тоже...