我正在尝试使用OAuth2与Google Maps Coordinate进行身份验证,但在指定我希望Auth令牌有效的范围时,我遇到了问题。我用来请求访问代码的URL采用以下格式:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id={client id}&redirect_uri={App URL}&approval_prompt=force&scope=https://www.googleapis.com/auth/coordinate
我遇到的问题是,同意屏幕只是说"此应用程序希望:具有离线访问功能"。它没有提及授予与Google Maps Coordinate交互的权限。我开始认为这是Google的一个错误,因为如果我尝试通过将.readonly
添加到网址的末尾来获取只读令牌,则同意屏幕会显示"此应用想:查看您的Google Coordinate Jobs"。同样,如果我将coordinate
替换为docs
或drive
,我会获得正确的同意屏幕,其中应用请求访问和修改Google云端硬盘内容的权限。
如果我使用坐标范围获得一个令牌,并且#34;具有离线访问权限"权限,然后使用该令牌尝试和请求协调,我只是得到"权限不足"错误。
在尝试获取Maps Coordinate的访问代码时,似乎只会出现此问题。还有其他人遇到过这个问题吗?
由于
答案 0 :(得分:1)
这不是一个错误,这只是一个奇怪的行为(也许是一个错误)。 (所以它可能不是100%正确,我在说什么)
您在请求网址approval_prompt=force
中使用,也就是说,始终会要求用户授予权限。接下来是,您获得了一个刷新令牌(除非用户明确删除了他的帐户中的应用权限),但您必须exchange for an access token才能获得刷新令牌。
这也是原因,你总是得到“这个应用程序想:有离线访问”。一旦您允许特定范围,它将不再显示在同意屏幕中。
docs
和drive
同意屏幕显示正确,因为您没有给他们留下遗产。
我基本上看到了两种可能性:不要使用批准提示(因此在第一次授权后跳过同意屏幕,只需在用户点击允许的情况下重定向,但不点击允许)或{{3} }。
或者为您的帐户试用exchange the token to a refresh token。
答案 1 :(得分:0)
我认为当它显示离线访问时,它意味着您之前已经接受了这些权限。这有时发生在我身上,尝试撤销旧访问并再次尝试获取新鲜令牌。转到Google Google帐户页面(https://www.google.com/settings/personalinfo) - >安全 - >帐户权限 - >查看全部,然后搜索地图访问权限并撤消它,然后重试