2014-09-19 112 views
1

有什么办法可以使用GoogleWebAuthorizationBroker来提供RedirectURL吗?Google Drive SDK 1.8.1 RedirectURL

这里是C#示例代码:

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

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

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

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

这似乎可以使用Python版本的Google Client API,但是我发现它很难找到任何有关.NET的参考。

回答

0

看看PromptCodeReceiver的实现,你可以看到它包含重定向uri。

您可以使用自己喜欢的redirect uri实现自己的ICodeReceiver,并从WebBroker调用它,该应用类似于GoogleWebAuthorizationBroker

我认为这将是很好的理解为什么你不能只使用PrompotCodeReceiver或LocalServerCodeReceiver

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

UPDATE(更多详情,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为我工作,所以我不确定你的代码有什么问题。
+0

如果您能详细说明您的答案,这将有所帮助。谷歌.Net API吸引到一个水平,我只是放弃处理这些。反正我无法找到传递自己的重定向网址。可以在python或php apis中执行,但不能在.net apis中执行。为什么? http://stackoverflow.com/questions/27119038/google-oauth2-redirect-url-issues。许多其他公司正在使用OAuth2。从来没有任何问题使用他们的apis。Google apis,文档,示例代码(充满错误)是最糟糕的。 – 2014-11-25 06:30:09

+0

我更新了我的答案,注意我们正在努力改进图书馆,所以我们将不胜感激任何具体建议。随时在问题跟踪器中开启一个新问题,解释您需要什么 - https://code.google.com/p/google-api-dotnet-client/issues/list。请记住,图书馆是开源的,所以请随时捐助。 – peleyal 2014-11-25 14:49:59

+0

“我很乐意进一步了解为什么你需要设置不同的重定向uri,所以我们将能够相应地改进图书馆。” - 我不需要有不同的重定向网址。我只需要有“重定向网址”。没有地方可以放一个。现在实现有一些本地主机/授权硬编码(为什么???)。我只是不明白。为什么不在现有的实现中添加一个参数以允许用户传递重定向url? – 2014-11-25 14:59:50