Google Drive SDK 1.8.1 RedirectURL

时间:2014-09-19 11:52:30

标签: google-api google-drive-api google-api-dotnet-client

有没有办法提供RedirectURL然后使用GoogleWebAuthorizationBroker?

以下是C#中的示例代码:

Task<UserCredential> credential = GoogleWebAuthorizationBroker.AuthorizeAsync(secrets, scopes, GoogleDataStore.User, cancellationToken, dataStore);

或者我们必须使用不同的方法?

我有一个&#34;已安装的应用程序&#34;它运行在用户的桌面上,而不是网站上。默认情况下,当我创建一个&#34;已安装的应用程序&#34;在API控制台中,默认情况下,重定向URI似乎设置为本地主机。

最终发生的是在验证序列之后,用户被重定向到localhost并收到浏览器错误。我想通过提供自己的重定向URI来防止这种情况发生:urn:ietf:wg:oauth:2.0:oob:auto

这似乎可以使用Python版本的Google Client API,但我发现很难找到任何对.NET的引用。

1 个答案:

答案 0 :(得分:0)

查看PromptCodeReceiver的实现,因为您可以看到它包含重定向uri。

您可以使用您喜欢的重定向uri实现自己的ICodeReceiver,并从WebBroker中调用它,该WebBroker应与GoogleWebAuthorizationBroker类似。

我认为理解为什么你只能使用PrompotCodeReceiver或LocalServerCodeReceiver会很棒。

请注意,我们上周刚刚发布了一个新库,因此您应该将其更新为1.9.0。

更新(更多细节,2014年11月25日):

您可以创建自己的ICodeReceiver。您必须执行以下操作:
*代码从未经过测试......抱歉。

public class MyNewCodeReceiver : ICodeReceiver
{
    public string RedirectUri
    {
        get { return YOU_REDIRECT_URI; }
    }

    public Task<AuthorizationCodeResponseUrl> ReceiveCodeAsync(
      AuthorizationCodeRequestUrl url,
      CancellationToken taskCancellationToken)
    {
        // YOUR CODE HERE FOR RECEIVING CODE FROM THE URL.
        // TAKE A LOOK AT THE FOLLOWING:
        // PromptCodeReceiver AND LocalServerCodeReceiver
        // FOR EXAMPLES.
    }
}

PromptCodeReceiverLocalServerCodeReceiver

然后你必须做以下事情 (而不是使用GoogleWebAuthorizationBroker.AuthorizeAsync方法):

var initializer = new GoogleAuthorizationCodeFlow.Initializer
{
    ClientSecrets = secrets,
    Scopes = scopes,
    DataStore = new FileDataStore("Google.Apis.Auth");
};
await new AuthorizationCodeInstalledApp(
        new GoogleAuthorizationCodeFlow(initializer),
        new MyNewCodeReceiver())
    .AuthorizeAsync(user, taskCancellationToken);

另外:

  1. 我很乐意进一步了解为什么需要设置不同的重定向uri,因此我们可以相应地改进库。
  2. 当我创建一个已安装的应用程序时,当前的PromptCodeReceiver和LocalServerCodeReceiver对我有效,所以我不确定你的代码有什么问题。