日前在測試程式中需要使用到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 留言