- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
第一次使用 Google+ API。我有一个带有 Web 和 Android 客户端的应用程序,该客户端使用 G+ 进行身份验证。 Web 客户端运行良好。我在 Google API 控制台中设置了一个“Web 应用程序的客户端 ID”,我用它来通过 JavaScript 客户端获取 token 。
javascript 客户端使用以下按钮(基本上逐字从 Google 演示应用程序中获取):
<button class="g-signin"
data-scope="https://www.googleapis.com/auth/plus.login"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-clientId="my_web_application_client_id"
data-callback="onSignInCallback"
data-theme="dark"
data-cookiepolicy="single_host_origin">
我在 Python 服务器上验证:
url = ('https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=%s' % token)
h = httplib2.Http()
result = json.loads(h.request(url, 'GET')[1])
到目前为止一切顺利。 token 按预期进行验证。
现在对于 android 应用程序...我为同一个项目设置了一个“Android 应用程序的客户端 ID”,并使用以下方式生成的调试指纹:keytool -exportcert -alias androiddebugkey -keystore debug.keystore -list -v
客户端 ID 名称的包与我的 Android list 中的内容匹配。
我正在使用 GoogleAuthUtil 在我的 Android 应用中生成 token :
String token =
GoogleAuthUtil.getToken(
this,
"selected@email.address",
"oauth2:server:client_id:<client_id>:" +
"api_scope:https://www.googleapis.com/auth/plus.login");
如果我使用我新创建的 Android 应用程序客户端 ID,我会得到:GoogleAuthException:com.google.android.gms.auth.GoogleAuthException:未知
我还没有想出那个办法,但一些解决方案暗示我应该只使用 Web 应用程序客户端 ID,并且异常正在按预期工作。
如果我使用我的 Web 应用程序客户端 ID,那么一切似乎都工作正常并返回一个 token ,但是当我将 token 发送到我的服务器进行验证时, token 被拒绝:
{u'error_description': u'Invalid Value', u'debug_info': u'code: INVALID_VALUE
http status: 400
arguments: [invalid_token]
cause: com.google.security.lso.protocol.oauth2.common.OAuth2ErrorException:\
invalid_token at
com.google.security.lso.grant.token.TokenManager.getTokenInfo(TokenManager.java:603) at
com.google.security.lso.apiary.tokeninfo.TokenInfoAction.execute(TokenInfoAction.java:92)
我已经验证到达服务器的 token 与在应用程序中获取的 token 相同(没有杂散的空格等)。
知道我做错了什么吗?感谢您的任何建议!
最佳答案
我最后做了以下事情:
调用 GoogleAuthUtil 时,而不是以下范围:
oauth2:server:client_id:<client_id>:api_scope:https://www.googleapis.com/auth/plus.login
我用过:
audience:server:client_id:<client_id>
其中 client_id 是 web 客户端 ID。
这会产生一个更长的 token 。您可以通过以下方式解密/验证此 token :
https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=<token>
请注意,查询参数键是 id_token,而不是 access_token。
服务器响应如下:
{
"issuer": "accounts.google.com",
"issued_to": "<android_client_id>",
"audience": "<web_client_id>",
"user_id": "<some_long_integer>",
"expires_in": 3354,
"issued_at": 1406474776,
"email": "<email address passed to GaiaAuthUtil>",
"verified_email": true
}
然后在您的服务器上:
然后继续处理请求。
此解决方案混合了来自其他 StackExchange 讨论和本教程的信息: http://android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android.html
希望这会节省一些时间!
关于android - 在服务器上的 GoogleAuthUtil.getToken() Google+ 上验证 token 时出现 OAuth2ErrorException invalid_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24852882/
我已经通过 putty 终端在 ubuntu 服务器上上传了我的 Laravel 项目。 Composer 安装在服务器机器上,但是当我运行任何工匠命令时,它会出错。 $ php artisan se
我正在尝试从数据库中选择一个值,如果一切都只是数字,它可以完美工作 - 但如果涉及字母,它就无法工作。这是 OpenCart 中的。 我的专栏名为 campaign_code ,其类型为 VARCHA
在 file1.php 中: set_error_handler('my_error_handler'); set_exception_handler('my_exception_handler');
有时,我的 php 会说: "ErrorException : Error while sending QUERY packet. PID=X" 我试图放置一个 try/catch block 来处理
我尝试使用 laravel 在 mysql 中插入数据,但收到错误 ErrorException (E_NOTICE)试图获取非对象的属性,我不知道问题出在哪里,请帮助我。 我的 Controller
尝试在超时的连接上查询数据库时,我开始遇到此错误。 Fatal error: Uncaught exception 'ErrorException' with message 'mysql_query
我是 laravel 的新手,在 twitter bootstrap 的帮助下创建了一个小程序。 我正在尝试访问这条路线: http://127.0.0.1:8000/posts/create 我得到
PHP 5.1 引入了 ErrorException 。两个函数的构造函数不同 public __construct ([ string $message = "" [, int $code = 0
我正在尝试为以下项目安装供应商 connect在 osx lion 上。 cd /tmp git clone git://github.com/dsyph3r/connect cd connect g
尝试了几分钟后。我的routes.php 文件中有这个 Route::get('home/bookappointment/{id?}', array('as' => 'bookappointment'
我收到这个错误,但我不确定是因为关系还是其他原因? 错误 ErrorException in HasRelationships.php line 487: Class 'Company' not fo
在我自制的 PHP MVC 框架中,我编写了一个小的错误处理程序,将 PHP 错误包装在一个异常中,然后将其抛出。 class ErrorController extends ControllerAb
当我使用 NLog 2.0.1 捕获异常时,我正在寻找一种记录表达性消息的方法,例如 try { .... } catch(Exception ex) { logger.ErrorEx
session 存储问题 session 存储不适用于我的 Laravel 5。使用它一个月没有问题。但是自从最近上传到网络服务器后,我在每个页面上都得到了以下响应。 ErrorException i
最近我在 AWS 开了一个账户。我在 Ubuntu 上使用他们的 EC2。我安装了我的 Laravel 项目并在命令行中写了 chmod -R 777 storage .现在我收到一个错误: Erro
我正在尝试设置一个 Laravel 网站,并且我已经能够完成一些工作,但随后我遇到了此错误。 出于安全原因,mail() 已被禁用 我曾尝试联系我的托管服务提供商以协助激活该功能,但他们让我大吃一惊,
我刚刚git clone我的一个包含 Laravel 5.1 项目的存储库。我已经完成了启动和运行的正常步骤(设置网络服务器、数据库等)。我现在已经转到我配置的网址,并且收到以下错误消息: Error
以下代码按预期工作:抛出 ErrorException 并为 require 生成的 fatal error 调用关闭函数 register_shutdown_function(function()
我正在尝试使用 Kohana 框架 3.3 做一个简单的 MVC 界面。 我已将 Bootstrap 修改为: 'controller' => 'Album', 'action' => 'in
假设我有这个功能: try { if (s1 (tests/question3.spec.js:14:13) 我如何为 mocha 测试编写断言以确认抛出异常? 最佳答案 你可以绑定(b
我是一名优秀的程序员,十分优秀!