.net 如何将作用域作为文章正文的一部分而不是URL参数提供?

.net 如何将作用域作为文章正文的一部分而不是URL参数提供?,.net,google-admin-sdk,google-api-dotnet-client,google-oauth,.net,Google Admin Sdk,Google Api Dotnet Client,Google Oauth,一点背景知识 我正在从事一个项目,该项目可能为每个用户处理很多Google API及其作用域。其中一个问题是,当用户选择大量作用域进行身份验证时,它们将作为参数提供在URL中并被截断。例如,url可能因此终止(为了可读性而换行): 这是希望我的用户只需验证一次的结果,但我意识到,对于他们使用的每个API,必须进行一次验证并不可怕。所以我把它拆开了,但后来发现在再次验证后,它会覆盖他们的访问权限。因此,我查看了文档中提到的内容,结果发现,对于,显然,它是这样做的: 我认为这里的问题是您使用的是已安

一点背景知识

我正在从事一个项目,该项目可能为每个用户处理很多Google API及其作用域。其中一个问题是,当用户选择大量作用域进行身份验证时,它们将作为参数提供在URL中并被截断。例如,url可能因此终止(为了可读性而换行):

这是希望我的用户只需验证一次的结果,但我意识到,对于他们使用的每个API,必须进行一次验证并不可怕。所以我把它拆开了,但后来发现在再次验证后,它会覆盖他们的访问权限。因此,我查看了文档中提到的内容,结果发现,对于,显然,它是这样做的:

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

好的,现在听起来我有两个选择。第一个是为每个API维护一个单独的令牌。然而,在我提交该路由之前,我查看了基于Python的路由如何处理它,因为在进行身份验证时,我在URL中没有看到任何作用域,所以我假设它是作为POST主体发送的

主要问题


对于已安装的应用程序,是否可以在不提供作用域作为URL参数的情况下进行身份验证?我曾尝试使用PowerShell和Invoke RestMethod来尝试让POST请求之类的东西工作,但没有成功。

我认为这不是客户端库的问题。问题在于最初的授权请求。向用户弹出列表的是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个字符。如果超过这个数字,它将被一些浏览器切断

选项

我读到了

谷歌支持增量授权,这使你的应用程序能够 在登录时请求初始权限,以后可以请求 附加权限,通常在需要之前。对于 例如,如果您的应用程序允许用户将音乐播放列表保存到谷歌 驱动器,您可以在登录时询问基本用户信息,然后 当用户准备好保存时,仅请求Google驱动器权限 他们的第一个播放列表。此时,“同意”对话框会询问 仅限新权限的用户,这使其更简单, 根据上下文作出决定

我只能找到关于或的信息。这并不意味着它只能得到他们的支持。所有这些都是谷歌的SDK,所以它们可能只允许内部使用。但是,这可能是我们可以添加到客户端库中的内容。我建议您添加一个问题请求

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

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

更新


经过一些挖掘后,
include\u已授予\u作用域
不在客户端库中。这就意味着必须添加它,否则在没有客户机库的情况下,您将不得不以艰难的方式完成。问题请求可能是解决方法。

我认为这不是客户端库的问题。问题在于最初的授权请求。向用户弹出列表的是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个字符。如果超过这个数字,它将被一些浏览器切断

选项

我读到了

谷歌支持增量授权,这使你的应用程序能够 在登录时请求初始权限,以后可以请求 附加权限,通常在需要之前。对于 例如,如果您的应用程序允许用户将音乐播放列表保存到谷歌 驱动器,您可以在登录时询问基本用户信息,然后 当用户准备好保存时,仅请求Google驱动器权限 他们的第一个播放列表。此时,“同意”对话框会询问 仅限新权限的用户,这使其更简单, 根据上下文作出决定

我只能找到关于或的信息。这并不意味着它只能得到他们的支持。所有这些都是谷歌的SDK,所以它们可能只允许内部使用。但是,这可能是我们可以添加到客户端库中的内容。我建议您添加一个问题请求

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

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

更新


经过一些挖掘后,
include\u已授予\u作用域
不在客户端库中。这就意味着必须添加它,否则在没有客户机库的情况下,您将不得不以艰难的方式完成。问题请求可能是解决问题的方法。

我已经确定这是不可能的。在对python代码进行了爬行(我认为它的工作方式不同)之后,我使用Fiddler捕获了发送到浏览器的初始URL,并发现它在查询参数方面确实做了完全相同的事情。由于某种原因,我无法直接使用浏览器开发人员工具捕获重定向中的作用域

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


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

我确定这是不可能的。在对python代码进行爬网之后,我认为该代码正在工作