标签: google-auth-library

传入的JSON对象不包含client_email字段

我正在尝试创建一个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

21
推荐指数
3
解决办法
2717
查看次数

Google Auth迁移到androidx:SignInHubActivity不实现Lifecycle

迁移到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

17
推荐指数
2
解决办法
2594
查看次数

您如何使用 Google API getRequestHeaders() 获取 OAuth2 访问令牌?

我正在使用googleapisnpm 库授权使用 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-api-nodejs-client google-auth-library

9
推荐指数
2
解决办法
2861
查看次数

java.io.IOException:从流读取凭据时出错,未指定“类型”字段

我正在尝试使用我自己的帐户对 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)

有什么想法可能有帮助吗?

google-authentication google-photos-api google-auth-library

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

使用 serviceusage API 和服务帐户启用 API

我想为客户端创建 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

5
推荐指数
2
解决办法
4070
查看次数

如何从 python 函数登录 Google Cloud Storage?

我是谷歌云存储的新手,我尝试设置一个每天下载一次 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

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

如何将 google-auth-library 与 Google Cloud Storage 和 NodeJS 结合使用?

我想在 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

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

Google 登录:使用 google-auth Python 包时“未找到密钥 ID xxxx 的证书”

我正在维护一个网站及其移动应用程序(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)

google-authentication jwt google-signin google-auth-library

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