标签: google-identity-toolkit

间歇性(但经常)Google Identity Toolkit验证错误:"明文太大"

我有时 - 但并非总是 - 从Google身份工具包中收到"明文太大"的错误.它似乎在应该尝试验证签名的部分(使用RSA).由于它验证了有效载荷的SHA256散列,因此明文大小不应有任何变化.

如果我记录它正在尝试使用的令牌,并将其与https://jwt.io/上的调试器一起提供给Google RSA证书(来自https://www.googleapis.com/identitytoolkit/v3/relyingparty/ publicKeys ;使用jwt.io放在"kid"下面顶部红色框中的密钥标识符,它表示签名有效.

这只发生在一部分时间,可能略高于一半.如果我重复身份验证,似乎没问题.

这似乎只发生在新的身份验证上; 如果它已经过身份验证,一切正常,即使我目前没有使用会话cookie:我的代码会在每个请求上验证gtoken身份验证.一旦我登录,一切都很好,直到我退出(再次,通过gitkit).但是,如果我以后再次登录,我很可能会遇到这个错误.

我正在为我的基础设施使用App Engine.dev_appserver和部署的App Engine以及使用JavaScript gitkit库的桌面浏览器和使用Objective C gitkit库的iOS应用程序都会发生这种情况.(我没有针对dev_appserver使用iOS测试,仅在部署中.)

我正在使用的代码如下所示:

    gtoken = cookie["gtoken"].value
    logging.debug("Verifying Google Identity Toolkit token: %s",
                  gtoken)
    gitkit_user = gitkit_instance.VerifyGitkitToken(gtoken)
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪如下(从上面引用的行开始):

  File "/base/data/home/apps/redacted/redacted.py", line 218, in redacted:
    gitkit_user = gitkit_instance.VerifyGitkitToken(gtoken)
  File "/base/data/home/apps/redacted/lib/identitytoolkit/gitkitclient.py", line 266, in VerifyGitkitToken
    parsed = crypt.verify_signed_jwt_with_certs(jwt, certs, aud)
  File "/base/data/home/apps/redacted/lib/oauth2client/crypt.py", line 240, in verify_signed_jwt_with_certs
    _verify_signature(message_to_sign, signature, certs.values())
  File "/base/data/home/apps/redacted/lib/oauth2client/crypt.py", line 119, in _verify_signature
    if verifier.verify(message, signature):
  File "/base/data/home/apps/redacted/lib/oauth2client/_pycrypto_crypt.py", line 52, in verify …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform google-identity-toolkit google-identity

5
推荐指数
1
解决办法
286
查看次数

使用signInWithCredential()进行身份验证

我正在尝试连接到第二个Firebase应用并进行身份验证signInWithCredential(),但我不知道如何对idToken第二个应用有效:

  connect(accessToken: string, config: FirebaseAppConfig) {
    let one: firebase.app.App = this.angularFireTwo.database["fbApp"];
    one.auth().currentUser.getToken()
      .then(idToken => firebase.auth.GoogleAuthProvider.credential(idToken, accessToken))
      .then(credential => {
        let two = firebase.initializeApp(config, `[${config.apiKey}]`);
        return two.auth().signInWithCredential(credential);
      })
      .catch(console.warn)
      .then(console.info);
  }
Run Code Online (Sandbox Code Playgroud)

我得到了错误https://www.googleapis.com/identitytoolkit/v3/:

IdP响应中的id_token无效

如果我使用signInWithPopup()我可以验证并且连接正常:

        two.auth().signInWithPopup(new firebase.auth.GoogleAuthProvider())
Run Code Online (Sandbox Code Playgroud)

任何人都知道我应该怎么做才能获得有效的idToken?


更新:

我一直试图弄清楚身份验证过程,据我所知,它是这样的:

  1. 来自config: FirebaseAppConfigfirebase读取apiKeyauthDomain
  2. 它与服务器联系并获取已启用Google提供商的Web客户端ID123.apps.googleusercontent.com
  3. 用这个Web Client IDauthDomain它联系www.googleapis.com,它返回idToken
  4. idToken然后,这用于识别要求用户访问用户个人资料等的应用程序.
  5. 当用户同意时,回调将返回用于此身份验证的用户详细信息+凭据,其中包含idTokenWeb应用程序和accessToken用户

现在,如果我使用signInWithPopup()步骤2-3-4在后台完成(弹出窗口).我只需要一种idToken为步骤4 生成的方法,因此我可以使用它来生成凭证firebase.auth.GoogleAuthProvider.credential(idToken, accessToken)和登录 …

firebase google-identity-toolkit firebase-authentication angularfire2

5
推荐指数
1
解决办法
9657
查看次数

Firebase 身份验证与 Google Identity Toolkit 定价

我看到 Firebase 在 Firebase Admin 中没有添加服务器身份验证 API,但只有用户管理(CreateUser 和 UpdateUser)。

Firebase 仅通过依赖于 Google Identity Platform 的客户端库提供登录 ( https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword )

进一步探讨后,我结束了在寻找火力地堡验证REST API(实现了它太伟大工程)在这里。此 API 参考非常适合通过 REST API 实现身份验证并避免对客户端库的依赖。因为这有助于通过云功能进行完整的服务器端身份验证。

谈到定价,Firebase 提到 Auth 不需要任何费用,因为 Google Identity 平台的定价非常高。

所以想知道 Firebase 团队对此有何看法或任何对此进行过探索的人。

firebase google-identity-toolkit firebase-authentication

5
推荐指数
0
解决办法
702
查看次数

从 GAPI 迁移到 Google Identity Services (GIS),服务器端问题

如何使用新系统 (GIS) 获取刷新的 ID 令牌?

我有一个网络应用程序,它使用 Google 登录并将 id_token 发送到我的服务器以使用某些 GCP 服务。我按以下方式使用 GAPI Signin2/auth2:

  • gapi.client.init(API_KEY, OAUTH_CLIENT_ID, SCOPES), SCOPES 只有 userinfo.email 和个人资料
  • 获取 currentUser by gapi.auth2.getAuthInstance().currentUser.get()(如果用户未登录,则呈现登录按钮)
  • 如果currentUser.hasGrantedScopes(SCOPES)
    • 那么gapi.client.getToken()这会给我一个{ id_token, access_token }
  • 然后,我会将 id_token 发送到我的服务器,以确保用户已登录并获取他们的 Google 用户 ID

在我的 NodeJS 服务器上,我将使用 google-auth-library 中的 OAuth2Client:

  • 使用创建一个新的 OAuth2Client 实例new OAuth2Client(OAUTH_CLIENT_ID)

  • 当客户端发送请求时,从凭据中提取 id_token 并调用:

    oauthClient.verifyIdToken({ idToken: idToken, 受众: OAUTH_CLIENT_ID, })

  • 在此结果上调用 getPayload() 将为我提供用户的 Google id,然后我可以用它来存储由它键入的数据等。

  • 当服务器发现id_token已过期时,会因verifyIdToken()而出错。

客户端将捕获令牌过期错误并通过执行以下操作发出刷新:

  • authInstance.currentUser.get().reloadAuthResponse()
  • 响应将具有新的凭据 ({id_token, access_token})
  • 客户端将使用新的凭据重新向服务器发出请求

====

好吧,现在 Google 表示他们将在新库(Google Identity …

google-oauth google-api-js-client google-identity-toolkit google-signin google-identity

5
推荐指数
1
解决办法
2407
查看次数

如何允许移动应用程序使用Facebook和Google登录以访问GAE上的Web服务?

这与我关于创建Facebook应用程序的其他问题有关.

我一直在阅读很多关于如何最好地登录访问我在Google App Engine上运行的网络服务的移动应用程序用户(iOS和Android)登录的内容.我还不清楚如何做到最好,因为我想提供Google和Facebook登录.应用程序和网络服务对Facebook或Google没有任何作用,除了我想搭载他们的登录信息.

只使用Google for GAE登录非常简单,使用OpenIDConnect也是如此.不幸的是,Facebook不支持这一点.

在这里阅读一个旧问题,其中某人想要做同样的事情,看起来应用程序应该进行Facebook登录,然后获得一个令牌传递到我的后端,需要通过联系Facebook进行验证.这是今天怎么做的?

我还找到了Google Identity Toolkit,这似乎是我需要的.但是,我没有网站或只有应用程序.我需要让应用程序进行Facebook登录,并以某种方式为我的Web服务提供一些东西,以便它可以验证登录信息.

稍后,应用程序用户应该可以使用随机的Facebook,Google和我的自定义用户名/密码登录.应用程序和Web服务应该知道用户已登录并授权它访问REST API.

我该如何做到这一点?顺便说一句,我正在使用Go on GAE.

我真的很感激,如果有人能够解释是否有多种选择如何做到这一点,优点和缺点,并提供最佳方法的概述和需要做的事情.

非常感谢您的帮助!

UPDATE

好的,非常感谢大家的帮助和指点.我已成功为我的GAE后端运行iOS快速入门示例应用程序.基本上,在GAE上的我的Web服务上创建了Facebook应用程序和权限凭据,以便示例iOS应用程序可以登录.

在我在数据存储区中拥有经过身份验证的用户之前,还有一点差距,并且可以授权连续的API调用.

此时的主要开放性问题:

  1. 如何在Facebook或Google登录成功后获得iOS应用中的gtoken?
  2. 我应该在我的Web服务上显式调用API来传递gtoken,还是在启用Gitkit API的情况下以某种方式自动调用?

谢谢你的帮助!

UPDATE

要自己回答#1和#2,可以在应用引擎配置中找到"成功登录网址",以便应用知道使用gtoken调用的位置.之后就像在答案中解释的那样.

google-app-engine go google-login facebook-login google-identity-toolkit

3
推荐指数
1
解决办法
543
查看次数

适用于PHP的Google Identity Toolkit API会返回INVALID_CLIENT

我正在努力让Google Identity Toolkit API适用于基于PHP的应用程序.

我一直在关注Google提供的快速入门指南:https: //developers.google.com/identity/toolkit/web/quickstart/php

我完全按照步骤(并检查和双重检查).

登录按钮显示在index.php页面上.单击此按钮可重定向到该widget.php页面.我可以选择要登录的帐户,然后在返回到成功登录页面时(index.php再次),我收到以下错误消息:

致命错误:未捕获的异常"Google_Auth_Exception",并显示消息"刷新OAuth2令牌时出错,消息:'{"error":"invalid_client","error_description":"OAuth客户端无效." }"

我尝试在Google Developer Console中重新创建OAuth客户端.检查电子邮件和项目名称字段时提到的一些搜索结果已在OAuth同意屏幕上完成,所有这些都是我完成的.

任何帮助和建议将不胜感激.注意:我只使用Identity Toolkit API设置下的可用提供程序中的"Google".

我的index.php页面:

<!DOCTYPE html>
<html>
<head>

<!-- 1: Load the Google Identity Toolkit helpers -->
<?php
  set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ .'/vendor/google/apiclient/src');
  require_once __DIR__ . '/vendor/autoload.php';

  $gitkitClient = Gitkit_Client::createFromFile(dirname(__FILE__) . '/gitkit-server-config.json');
  $gitkitUser = $gitkitClient->getUserInRequest();
?>
<!-- End modification 1 -->

<script type="text/javascript" src="//www.gstatic.com/authtoolkit/js/gitkit.js"></script>
<link type=text/css rel=stylesheet href="//www.gstatic.com/authtoolkit/css/gitkit.css" />

<script type=text/javascript>
  window.google.identitytoolkit.signInButton(
    '#navbar',
    {
      widgetUrl: "/gitkit",
      signOutUrl: …
Run Code Online (Sandbox Code Playgroud)

php google-identity-toolkit oauth2

3
推荐指数
1
解决办法
1171
查看次数

新的 Firebase 身份验证计费如何运作?

我的应用程序仅支持使用 Firebase 身份验证通过电子邮件/密码、Google 和 Facebook 登录。

在里面Authentication -> Settings tab,Firebase 对我说"Upgrade to Firebase Auth with Identity platform to access this feature."

我升级成功是因为我想禁用在客户端创建新帐户并禁用删除帐户。这些功能只是我想要的。

如果您有兴趣知道为什么我要禁止在客户端创建新帐户?请在这里检查我的问题以了解原因。

今天我打开Firebase Pricing,发现 Firebase 身份验证发生了变化,如您所见,Firebase 在最后添加了 2 行新行。

在此输入图像描述

我没有在电话验证中付费,因为我不使用该提供商。我只收取 Firebase 实时数据库和 Firebase 存储的费用。

这是我的问题:

  1. Identity Platform Pricing Monthly active users (excluding SAML/OIDC)=> 如果每日活跃用户数为 83,000 (83,000 * 30 = 2,490,000),到月底我大约需要支付多少费用?
  2. Monthly active users - SAML/OIDC=> 正如我上面所说,我的应用程序仅支持通过电子邮件/密码、Google 和 Facebook 登录,这是否意味着我不会因 SAML 和 OIDC 付费?

我希望一切都清楚。谢谢。

firebase google-cloud-platform google-identity-toolkit firebase-authentication

2
推荐指数
1
解决办法
2681
查看次数

使用Google身份进行Firebase身份验证(GoogleYOLO)

是否可以将Google身份(GoogleYOLO)与Firebase身份验证网络堆栈结合使用?如果是这样,怎么样?谢谢!

firebase google-identity-toolkit firebase-authentication google-identity

1
推荐指数
1
解决办法
431
查看次数