如何提供范围作为POST正文的一部分而不是URL参数?

时间:2015-11-04 05:59:44

标签: .net google-admin-sdk google-api-dotnet-client google-oauth2

有点背景

我正在开发一个Installed Application项目,该项目可能会为每个用户处理很多Google API及其范围。我遇到的一个major issue是当用户选择大量的作用域进行身份验证时,它们作为参数在URL中提供并被截断。例如,url可能会因此而终止(换行符为可读性):

...%20https://www.googleapis.com/auth/admin.directory.userschema.
readonly%20https://www.googleapis.com/auth/admin.reports.audit.readon
ly%20https://www.googleapis.com/auth/admin.rep

这是因为我希望我的用户只需要进行一次身份验证,但我意识到,对于他们正在使用的API,必须执行一次这样做并不会太糟糕。所以我打破了它,但后来发现再次验证后会覆盖他们的访问权限。所以,我查看了文档中提到的Incremental Authorization,但却发现no it won't work Installed Apps no intention,显然obvious option就是这样做了:

  

我认为这里的问题是您使用已安装的应用程序OAuth2流程,这与文档相反,不支持include_granted_scopes参数。

好的,所以在这一点上听起来我有两个选择。第一个和Google Apps Manager是为每个API维护一个单独的标记。但是,在我致力于这条路线之前,我查看了基于Python的Google API Client Library for .NET如何处理它,因为在验证时我没有看到URL中的任何范围,所以我认为它是作为POST发送的体。

主要问题

对于已安装的应用程序使用request,是否可以在不将作用域作为URL参数提供的情况下进行身份验证?我已经尝试过使用PowerShell和Invoke-RestMethod尝试获取类似POST请求的工作,但没有任何运气。

2 个答案:

答案 0 :(得分:0)

我不认为这是客户端库的问题。问题是最初的授权请求。弹出列表给用户的是HTTP get。

https://accounts.google.com/o/oauth2/auth?client_id={clientid}.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code

据我所知,http get的最大长度为2000个字符。如果它更多,那将被一些浏览器切断。

方法

我读到了incremental authorization

  

Google支持增量授权,可让您的应用启用   在登录时请求初始权限,稍后可以请求   附加权限,通常在需要之前。对于   例如,如果您的应用允许用户将音乐播放列表保存到Google   开车,您可以在登录时询问基本用户信息,以及稍后   当用户准备保存时,只询问Google云端硬盘权限   他们的第一个播放列表。此时,同意对话框询问   用户只有新的权限,这使他们更简单,   在上下文中做出决定。

我只能找到有关webAndroidiOS的信息。这并不意味着它只受到它们的支持。所有这些都是谷歌SDK,因此它可能是他们内部允许的东西。但是,这可能是我们可以添加到客户端库的东西。我建议你添加一个问题请求。 Google-api-dotnet-client issues

看起来应该是可能的。有一个http / rest示例here

我认为唯一的另一个选择就是你现在正在做的事情,并为每个API或你的应用程序的每个部分提供刷新令牌。

<强>更新

在客户端库中进行了一些挖掘include_granted_scopes之后。这意味着必须添加它,否则你必须在没有客户端库的情况下以艰难的方式完成它。问题请求可能是要走的路。

答案 1 :(得分:0)

我已经确定这是不可能的。在抓取我认为工作方式不同的python代码之后,我使用Fiddler来捕获发送到浏览器的初始URL,并且看到它确实与查询参数完全相同。由于我无法直接使用浏览器开发人员工具的某些原因,重定向中的范围似乎正在丢失。

那就是说,我不再有比较基础或任何理由认为其他项目的工作方式不同于记录的内容,所以我认为我的问题是无效的。

编辑:在撰写本文时,尽管有文档,但已安装的应用程序不支持增量身份验证。