我正在尝试创建一个Firebase云功能。因此,我将在本地运行我的Firebase云功能。但是,如何设置身份验证无效。
我已经安装了Firebase工具:https ://firebase.google.com/docs/functions/local-emulator
我已经运行了命令firebase login
,所以现在我已登录。然后,通过本教程创建了json密钥:https : //cloud.google.com/docs/authentication/getting-started
现在,如果我输入echo $GOOGLE_APPLICATION_CREDENTIALS
结果,则/home/$USER/.google/****.json
包含
"project_id","private_key_id","private_key","client_email", "client_id", "auth_uri", "token_uri", "auth_provider_x509_cert_url", "client_x509_cert_url"
Run Code Online (Sandbox Code Playgroud)
我也尝试安装完整的google cloud sdk并运行:gcloud auth application-default login
但是没有成功。
Npm软件包版本:
"firebase-functions":"3.0.2"
"firebase-admin": "8.2.0"
Run Code Online (Sandbox Code Playgroud)
我想我已经提供了足够的信息,但是如果您愿意,可以随时问我更多。
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const express = require("express");
const app = express();
app.get("/", async (req, res) => {
admin.firestore().collection('something').get().then((collection) =>
return res.send({"count": collection.docs.length, "status": 200});
});
exports.exports = functions.https.onRequest(app);
Run Code Online (Sandbox Code Playgroud)
代码并不重要,最重要的是,即使我已经完成了所有这些步骤,当我在本地模拟Firebase firebase serve
并触发函数时,却出现此错误:错误:传入的JSON对象不包含client_email领域
我可以确保您的json文件包含client_email字段。
您可以帮我与Google进行身份验证吗?
谢谢你的帮助。
javascript firebase google-cloud-functions firebase-admin google-auth-library
迁移到AndroidX后,我面临以下问题与Google Auth lib:
在Android 9 API 28上:
java.lang.IncompatibleClassChangeError: Class 'com.google.android.gms.auth.api.signin.internal.SignInHubActivity' does not implement interface 'androidx.lifecycle.LifecycleOwner' in call to 'androidx.lifecycle.Lifecycle androidx.lifecycle.LifecycleOwner.getLifecycle()' (declaration of 'androidx.lifecycle.LiveData' appears in /data/app/fourbottles.bsg.workinghours4b-G1onPKgFFE-l3aqjx0qDJw==/split_lib_dependencies_apk.apk)
at androidx.lifecycle.LiveData.observe(LiveData.java:172)
at androidx.loader.app.LoaderManagerImpl$LoaderInfo.setCallback(LoaderManagerImpl.java:100)
at androidx.loader.app.LoaderManagerImpl.createAndInstallLoader(LoaderManagerImpl.java:400)
at androidx.loader.app.LoaderManagerImpl.initLoader(LoaderManagerImpl.java:421)
at com.google.android.gms.auth.api.signin.internal.SignInHubActivity.zzn(Unknown Source:80)
at com.google.android.gms.auth.api.signin.internal.SignInHubActivity.onActivityResult(Unknown Source:68)
at android.app.Activity.dispatchActivityResult(Activity.java:7454)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4353)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Run Code Online (Sandbox Code Playgroud)
在Android 5.0.2 API 22上
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.lifecycle.Lifecycle$State …
Run Code Online (Sandbox Code Playgroud) android kotlin android-support-library androidx google-auth-library
我正在使用googleapis
npm 库授权使用 OAuth2 访问我的 Gmail 帐户以发送电子邮件。我正在使用以下代码(TypeScript)来做到这一点:
const oAuth2Client = new google.auth.OAuth2(
googleConfig.clientId,
googleConfig.clientSecret
);
oAuth2Client.setCredentials({
refresh_token: googleConfig.refreshToken
});
const accessTokenRetVal = (await oAuth2Client.refreshAccessToken()).credentials.access_token;
const accessToken = accessTokenRetVal || '';
Run Code Online (Sandbox Code Playgroud)
此代码有效,但我收到以下消息:
(node:8676) [google-auth-library:DEP007] DeprecationWarning: The `refreshAccessToken` method has been deprecated, and will be removed in the 3.0 release of google-auth-library. Please use the `getRequestHeaders` method instead.
Run Code Online (Sandbox Code Playgroud)
我在 Google、GitHubgoogleapis
和 StackOverflow上搜索过该模块,但找不到任何有关该getRequestHeaders
方法构成的文档。我试过调用getRequestHeaders
,但它似乎没有返回credentials
带有访问令牌的对象。
是否有关于getRequestHeaders
在这种情况下应该如何使用的官方文档?
我正在尝试使用我自己的帐户对 google photos api 中的 java 应用程序进行身份验证,但根据文档,该帐户不支持 service_account 。问题是 google-console 生成的用于 OAuth2 身份验证的文件不包含类型字段,只有通过为服务帐户创建凭据生成的文件才有效。
我尝试通过读取/不读取生成的文件来验证网络应用程序gcloud auth application-default login
,该文件确实包含 type/client_id/client_secret/refresh_token。
例如:
PhotosLibrarySettings settings =
PhotosLibrarySettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(
GoogleCredentials.fromStream(
new FileInputStream("credentials.json")
)))
.build();
Run Code Online (Sandbox Code Playgroud)
有什么想法可能有帮助吗?
我想为客户端创建 GCP 的自动部署。
为了做到这一点,我打开了一个页面让他们用谷歌登录,然后启用 IAM API 和服务使用 API。
然后我创建了一个服务帐户,我想从现在开始使用它,以便按需启用其他必需的 API,而不是一次性启用。
当我尝试启用 cloudkms API 时,我得到
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://serviceusage.googleapis.com/v1/projects/x-y-z/services/cloudkms.googleapis.com?alt=json returned "The caller does not have permission"
Run Code Online (Sandbox Code Playgroud)
我尝试使用从创建服务帐户的响应中创建的服务帐户凭据 (google.auth.jwt.Credentials),并添加了所有必需的权限。我不想将角色所有者授予服务帐户,因为我希望该帐户具有尽可能少的权限。
当我尝试使用用户的权限获取 cloudkms API 的状态时,它起作用了。
我已经看到一些解决方案解决了我需要在此处为服务帐户创建凭据的问题:https : //console.developers.google.com/apis/credentials但我确实也需要以编程方式执行此操作。
我的代码:
credentials = jwt.Credentials.from_service_account_file(service_account_info['email'] + '.json', audience="https://www.googleapis.com/auth/cloud-platform")
# credentials = GoogleCredentials.get_application_default() - it works with this
service_usage = googleapiclient.discovery.build('serviceusage', 'v1', credentials=credentials)
service_usage.services().get(name="projects/<project_id>/services/cloudkms.googleapis.com").execute()
Run Code Online (Sandbox Code Playgroud)
上面提到了错误。
python authentication google-cloud-platform google-cloud-iam google-auth-library
我是谷歌云存储的新手,我尝试设置一个每天下载一次 blob 的功能。目前我正在我的 Jupyter Notebook 中工作,但最终,代码将在 Azure 函数中运行。我正在努力设置将我连接到存储桶的客户端。我有一个服务帐户凭据 JSON,它使我能够连接到 google。
在本地我找到了一个解决方案:
from google.cloud import storage
client = storage.Client.from_service_account_json('<PATH_TO_SERVICE_ACCOUNT_JSON>')
Run Code Online (Sandbox Code Playgroud)
问题是我没有将 JSON 存储在云中的路径,但我将其存储在密钥保管库中。我想出了以下解决方案:
from google.cloud import storage
import json
from google.oauth2 import service_account
string_key = get_key_from_key_vault()
service_account_info = json.loads(string_key)
google_credentials = service_account.Credentials.from_service_account_info(
service_account_info
)
scoped_credentials = google_credentials.with_scopes(
['https://www.googleapis.com/auth/cloud-platform.read-only'])
print(type(scoped_credentials))
client = storage.Client(credentials = scoped_credentials)
Run Code Online (Sandbox Code Playgroud)
我不完全确定我是否需要该scoped_credentials = ...
部件,但我只有对存储桶的读取权限。(如果我跳过该部分,错误保持不变)
当我选择此解决方案时,出现以下错误:
DefaultCredentialsError: Could not automatically determine credentials. Please set
GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For
more information, please see …
Run Code Online (Sandbox Code Playgroud) python google-authentication google-cloud-storage google-cloud-platform google-auth-library
我想在 NodeJS 中使用Google Cloud Storage,但使用google-auth-library进行身份验证 具体来说:我想将其托管在 heroku 上,所以我想将秘密保存在环境变量中,而不是文件中(因为我必须这样做)提交文件以部署到 heroku)。基本上是身份验证库中建议的内容: https ://github.com/googleapis/google-auth-library-nodejs#loading-credentials-from-environment-variables
但我似乎无法将生成的客户端传递给存储构造函数?
node.js google-cloud-storage google-api-nodejs-client google-cloud-platform google-auth-library
我正在维护一个网站及其移动应用程序(iOS 和 Android)。对于移动应用程序中的 Google 登录,我在服务器端使用google-auth Python 包。
从大约一个月前开始,我开始从服务器端收到与Google登录相关的错误报告。错误消息如下所示:
未找到密钥 ID 728f4016652079b9ed99861bb09bafc5a45baa86 的证书。
服务器端 Google Sign-In 身份验证后端遵循此文档:
from google.oauth2 import id_token
from google.auth.transport import requests
# ...
try:
# The following line may raise ValueError with message:
# Certificate for key id xxxx not found.
id_info = id_token.verify_oauth2_token(google_id_token, requests.Request())
if id_info['aud'] not in VALID_CLIENT_IDS:
logger.error('Invalid aud from Google ID token: %s', id_info['aud'])
raise ValueError('Unverified audience.')
# ...
except ValueError as exc:
logger.error('Fail to verify Google ID token: %s', …
Run Code Online (Sandbox Code Playgroud)