有没有办法提供RedirectURL,然后使用GoogleWebAuthorizationBroker?
以下是C#中的示例代码:
Task<UserCredential> credential = GoogleWebAuthorizationBroker.AuthorizeAsync(secrets, scopes, GoogleDataStore.User, cancellationToken, dataStore);
或者我们必须使用不同的方法?
我有一个"已安装的应用程序",它运行在用户的桌面上,而不是网站上。默认情况下,当我在API控制台中创建"已安装的应用程序"项目时,重定向URI似乎默认设置为本地主机。
最终发生的情况是,在身份验证序列之后,用户被重定向到localhost并收到浏览器错误。我想通过提供我自己的重定向URI:urn:ietf:wg:oauth:2.0:oob:auto 来防止这种情况的发生
使用Python版本的Google Client API似乎可以做到这一点,但我发现很难在.NET.
p>查看PromptCodeReceiver的实现,因为您可以看到它包含重定向uri。你可以用你喜欢的重定向uri实现你自己的ICodeReceiver,并从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.
}
}
PromptCodeReceiver和LocalServerCodeReceiver。
然后你必须做以下事情(而不是使用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);
此外:
- 我很乐意进一步理解为什么你需要设置一个不同的重定向uri,这样我们就能相应地改进库
- 当我创建一个已安装的应用程序时,当前的PromptCodeReceiver和LocalServerCodeReceiver适用于我,所以我不确定您的代码有什么问题