feat(gcp): add support for external_account_authorized_user credentials #535
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Adds support for
external_account_authorized_usercredentials used by Google Cloud Workforce Identity Federation. This credential type is created when users authenticate withgcloud auth application-default loginusing workforce identity pools with external identity providers.Problem
Previously,
object_storeonly supported two Application Default Credential types:service_accountauthorized_userUsers with Workforce Identity Federation encountered deserialization errors when their ADC file contained
external_account_authorized_usercredentials, preventing them from using the library even though they had valid Google Cloud authentication.This affected enterprise environments where organizations use external identity providers (like Azure AD, Okta, etc.) to authenticate users to Google Cloud resources.
Solution
This PR extends credential support to include the
external_account_authorized_usertype:The implementation follows the same OAuth2 refresh flow as standard
authorized_usercredentials, but uses the customtoken_urlendpoint (typicallyhttps://sts.googleapis.com/v1/oauthtoken) specified in the credential file.Changes
Files Modified:
src/gcp/credential.rs: Added ExternalAccountAuthorizedUserCredentials struct, enum variant, and TokenProvider implementationsrc/gcp/builder.rs: Updated credential selection logic to handle new typesrc/gcp/mod.rs: Added integration testLines Changed: +314 additions across 3 files
Testing
Unit Tests
Integration Tests
Test Results:
All existing tests continue to pass with no regressions.
Credential Format Example
{ "type": "external_account_authorized_user", "audience": "//iam.googleapis.com/locations/global/workforcePools/pool/providers/provider", "client_id": "xxxxx.apps.googleusercontent.com", "client_secret": "secret", "refresh_token": "token", "token_url": "https://sts.googleapis.com/v1/oauthtoken", "token_info_url": "https://sts.googleapis.com/v1/introspect", "quota_project_id": "project-id" }Impact
This change enables users in enterprise environments with Workforce Identity Federation to use
object_storewith their standard ADC configuration, matching the behavior of official Google Cloud client libraries (Python, Java, Go, etc.).References