C# Google 使用 OAuth 2.0 讀取.JSON 金鑰設置


 日前在測試程式中需要使用到Google 的OAuth 2.0 進行 身分認證,
 透過服務帳號授權取得到一組.JSON 的檔案。

需要透過..JSON 的檔案進行身分認證才能使用相關API應用

透過Google上文章,需多文章都採用

用Google OAuth套件

using Google.Apis.Auth.OAuth2;

 string jsonfileName = Path.Combine(rootPath, "[私密金鑰檔案名稱].json");

 GoogleCredential credential = GoogleCredential.FromFile(jsonfileName);

取得Token  文章很多採用 credential.GetOidcTokenAsync() 方式

但在我這次測試程式中POST API 時,用credential.GetOidcTokenAsync() 取得到 Token  

回應 

"error": {

        "code": 401,

        "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",

        "status": "UNAUTHENTICATED"

    }

經過多次嘗試,仍然回應 401 ...

只能求助 CHATGPT 如何使用? 幾次嘗試下,給了 

// 服務帳戶密鑰文件建立憑證

            var credential = GoogleCredential.FromFile(jsonCredentialFilePath)

                .CreateScoped("https://www.googleapis.com/auth/cloud-platform");

            //憑證取得令牌

            var accessToken = credential.UnderlyingCredential.GetAccessTokenForRequestAsync().Result;

這個範例
成功讓  POST API  回應正確。

接者詢問 credential.UnderlyingCredential.GetAccessTokenForRequestAsync() 與.GetOidcTokenAsy差異?

GPT 給予的答覆

GoogleCredential.UnderlyingCredential 和 .GetOidcTokenAsync() 是 Google Cloud 客戶端庫中不同的功能,它們用於不同的目的,因此具有不同的作用。


1. `GoogleCredential.UnderlyingCredential`:

   - `GoogleCredential.UnderlyingCredential` 是 Google.Cloud.Credentials 库中的属性,它用于访问 Google Cloud 平台的基础身份验证凭据。它返回一个身份验证凭据的对象,可以是不同类型的凭据,如服务账号密钥、OAuth 令牌等。

   - 主要目的是让应用程序可以访问底层的身份验证信息,以便进一步自定义和控制身份验证设置。


2. `.GetOidcTokenAsync()`:

   - `.GetOidcTokenAsync()` 是 Google Cloud 客户端库中的一个方法,通常用于从 Google 身份验证服务器异步获取 OIDC(OpenID Connect)令牌。

   - OIDC 令牌用于进行身份验证,通常用于访问需要用户身份验证的资源,例如 Google Workspace API 或其他需要用户授权的 API。

   - 该方法的目的是在应用程序需要获取 OIDC 令牌以代表用户访问某些资源时使用。


总之,`GoogleCredential.UnderlyingCredential` 是用于访问应用程序的身份验证凭据的属性,而 `.GetOidcTokenAsync()` 是用于从 Google 身份验证服务器获取 OIDC 令牌的方法。它们的使用场景和目的不同,因此没有直接的核心差异。在实际应用程序中,您可能会同时使用它们,具体取决于您的需求。如果您需要用户身份验证并获取 OIDC 令牌,那么您通常会使用 `.GetOidcTokenAsync()` 方法。如果您需要访问和自定义底层的身份验证凭据,那么您会使用 `GoogleCredential.UnderlyingCredential` 属性。



張貼留言

0 留言