我有时 - 但并非总是 - 从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
我正在尝试连接到第二个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?
更新:
我一直试图弄清楚身份验证过程,据我所知,它是这样的:
config: FirebaseAppConfigfirebase读取apiKey和authDomain123.apps.googleusercontent.comWeb Client ID和authDomain它联系www.googleapis.com,它返回idTokenidToken然后,这用于识别要求用户访问用户个人资料等的应用程序.idTokenWeb应用程序和accessToken用户现在,如果我使用signInWithPopup()步骤2-3-4在后台完成(弹出窗口).我只需要一种idToken为步骤4 生成的方法,因此我可以使用它来生成凭证firebase.auth.GoogleAuthProvider.credential(idToken, accessToken)和登录 …
firebase google-identity-toolkit firebase-authentication angularfire2
我看到 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 团队对此有何看法或任何对此进行过探索的人。
如何使用新系统 (GIS) 获取刷新的 ID 令牌?
我有一个网络应用程序,它使用 Google 登录并将 id_token 发送到我的服务器以使用某些 GCP 服务。我按以下方式使用 GAPI Signin2/auth2:
gapi.client.init(API_KEY, OAUTH_CLIENT_ID, SCOPES), SCOPES 只有 userinfo.email 和个人资料gapi.auth2.getAuthInstance().currentUser.get()(如果用户未登录,则呈现登录按钮)currentUser.hasGrantedScopes(SCOPES):
gapi.client.getToken()这会给我一个{ id_token, access_token }在我的 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()====
好吧,现在 Google 表示他们将在新库(Google Identity …
google-oauth google-api-js-client google-identity-toolkit google-signin google-identity
我一直在阅读很多关于如何最好地登录访问我在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调用.
此时的主要开放性问题:
谢谢你的帮助!
UPDATE
要自己回答#1和#2,可以在应用引擎配置中找到"成功登录网址",以便应用知道使用gtoken调用的位置.之后就像在答案中解释的那样.
google-app-engine go google-login facebook-login google-identity-toolkit
我正在努力让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) 我的应用程序仅支持使用 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 存储的费用。
这是我的问题:
Identity Platform Pricing Monthly active users (excluding SAML/OIDC)=> 如果每日活跃用户数为 83,000 (83,000 * 30 = 2,490,000),到月底我大约需要支付多少费用?Monthly active users - SAML/OIDC=> 正如我上面所说,我的应用程序仅支持通过电子邮件/密码、Google 和 Facebook 登录,这是否意味着我不会因 SAML 和 OIDC 付费?我希望一切都清楚。谢谢。
firebase google-cloud-platform google-identity-toolkit firebase-authentication
是否可以将Google身份(GoogleYOLO)与Firebase身份验证网络堆栈结合使用?如果是这样,怎么样?谢谢!
firebase google-identity-toolkit firebase-authentication google-identity