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

  • 40
  • 0
  • C#
  • 2024-03-01

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

Google 使用 OAuth 2.0  讀取.JSON 金鑰設置的測試旅程

     日前在工作原因,又再次使用到Google 的OAuth 2.0 進行 身分認證,透過設置服務帳號授權取得到一組.JSON 的檔案,在C#程式中透過讀取JSON 的檔案進行身分認證才可應用相關API應用。
在網路上多數OAuth 2.0教學範例中都是使用 credential.GetOidcTokenAsync() 

用Google OAuth套件

using Google.Apis.Auth.OAuth2;

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

 GoogleCredential credential = GoogleCredential.FromFile(jsonfileName);

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

然而此次測試應用卻對於這個credential.GetOidcTokenAsync() 取得到金鑰給予驗證回應是
"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"

    }
不是?就是用OAuth 2 方法取得金鑰嗎?怎麼還是錯?
在現在時代,多個AI詢問下,總算問到了

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` 属性。

原來是有區分….
不知道下次何時會再碰到,先記錄起來,免得又找不到。忘記肯定是會的。