Google Web授权经纪人创建秘密uri

时间:2015-04-20 14:38:13

标签: c# google-drive-api google-authentication

我想为我的程序创建UserCredentials,此任务的签名似乎是

Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.AuthorizeAsync(
(Uri clientSecretsUri, IEnumerable<string> scopes, string user, CancellationToken taskCancellationToken);

我发现的所有教程只是创建一个ClientSecrets类并将其作为参数传递,遗憾的是这个类没有.ToUri()方法。我也找不到关于如何构建这个uri的任何文档。因此,鉴于我显然有我的客户端ID和秘密(如果需要,还可以重定向uri),如何创建此授权所需的uri?

2 个答案:

答案 0 :(得分:7)

我假设您正在为通用Windows平台开发?然后这将工作:

正如neosapien所说,你可以从Developer Console下载client_secrets.json。

使用Content的构建操作将其添加到项目中。

然后根据您在项目中的位置(在这种情况下为<ProjectDirectory>/Assets/client_secrets.json)加载它,如下所示:

await GoogleWebAuthorizationBroker.AuthorizeAsync( 
                    new Uri("ms-appx:///Assets/client_secrets.json"),
                    new[] {CalendarService.Scope.Calendar, DriveService.Scope.Drive},
                    "user",
                    CancellationToken.None)

答案 1 :(得分:0)

转到Google Developers Console并从API&amp;下面的Credentials项目下载.json文件。左侧边栏中的验证菜单。

如果要在部署中包含.json文件,只需对其进行加密即可保护您的密钥和ID安全。

需要以下用法:

  • using Google.Apis.Services // for BaseClientService
  • using Google.Apis.Util.Store // for FileDataStore
  • using System.Threading // for CancellationToken.None
  • using System.Reflection // for accessing the embedded resource of the json file
  • Using Google.Apis.Auth.OAuth2
  • 任何其他Google范围特定资源;例如,用于日历范围的Google.Apis.Calendar或用于电子邮件访问的Google.Apis.Gmail。

按如下方式创建字段和属性:

UserCredentials credentials;
CalendarService calendarService

这是我用来与Google API交互的代码:

try 
{
     GoogleWebAuthorizationBroker.Folder = "Tasks.Auth.Store";
     credentials = await GoogleWebAuthorizationBroker.AuthorizeAsync(
          GoogleClientSecrets.Load({file name or stream}).Secrets,
          new[] {
          GmailService.Scope.GmailCompose,
          CalendarService.Scope.Calendar,
          Google.Apis.Plus.v1.PlusService.Scope.UserinfoEmail },
          "user", CancellationToken.None,
          new FileDataStore("AppDataFolderName"));
} ...

由于我将加密的.json文件安装为我的软件的一部分,整个try / catch块都在using (var cryptoStream = Encryption.ReadJson()) block followed by GoogleClientSecrets.Load(cryptoStream).Secrets内,但您可以轻松使用任何文件路径和名称。< / p>

在上面的示例中,我要求访问读取和写入Gmail,读取和写入Google日历,并且我想知道他们在G +上的身份。 确保您已在Google Developers Console中启用了正确的API。

在您使用凭据创建服务之前,真正的魔法并没有实际发生。在上面的示例中,您将使用以下代码:

calendarService = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credentials,
ApplicationName = "My Application"
});

访问日历。

我很确定这是一种非常黑的共同做法,但它对我没有任何问题。我从这里找到的很多教程Google Drive | Daimto

中将它拼凑在一起