在使用Oauth 2.0()的Google授权时,我遇到了问题。
我的应用程序重定向URI是
http://localhost/google/c.php
我正在接收来自Google的get请求方法的access_token,但它会使用以下给定的网址发送数据(在通过登录同意后)
http://localhost/google/c.php#access_token=ya29.IgCM3ATGrzegCR8AATDlE-cRiYWIUVZhQKCJv6hw2nKTC9jJUYDfDieThjcq8A&token_type=Bearer&expires_in=3600
而不是
http://localhost/google/c.php?access_token=ya29.IgCM3ATGrzegCR8AAADlE-cRiYWIUVZhQKCJv6hw2nKTC9jJUYDfDieThjcq8A&token_type=Bearer&expires_in=3600
我不明白我为什么要#而不是?在查询URL的字符串之前。
我正在调用以下URL来启动此授权过程。
https://accounts.google.com/o/oauth2/auth?response_type=token&client_id=539024181015-s12j23s8fshbtv0g1n5ajrtml8mheh5c.apps.googleusercontent.com&redirect_uri=http://localhost/google/c.php&scope=https://www.googleapis.com/auth/analytics.readonly
答案 0 :(得分:3)
如果您使用OAuth 2.0进行客户端应用程序,则使用的是Implicit Grant flow。
隐式流程是为使用脚本语言(如JavaScript)在浏览器中实现的客户端设计的。
在隐式流中使用散列片段的原因是该片段不会在HTTP请求消息中发送。这样,中间服务器/路由器就不会拦截访问令牌。
答案 1 :(得分:1)
如果您想获取服务器的访问令牌,您应该要求授权代码并交换access_token的代码(如果您还请求脱机access_type,则可能需要刷新令牌)。以下是Google OAuth2网络服务器流程的文档:https://developers.google.com/accounts/docs/OAuth2WebServer