nazq opened a new pull request, #535:
URL: https://github.com/apache/arrow-rs-object-store/pull/535

   ## Summary
   
   Adds support for `external_account_authorized_user` credentials used by 
Google Cloud Workforce Identity Federation. This credential type is created 
when users authenticate with `gcloud auth application-default login` using 
workforce identity pools with external identity providers.
   
   ## Problem
   
   Previously, `object_store` only supported two Application Default Credential 
types:
   - `service_account` 
   - `authorized_user`
   
   Users with Workforce Identity Federation encountered deserialization errors 
when their ADC file contained `external_account_authorized_user` credentials, 
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_user` type:
   
   1. **New credential struct** with OAuth2 fields (client_id, client_secret, 
refresh_token, token_url)
   2. **TokenProvider implementation** using the STS (Security Token Service) 
OAuth token endpoint specified in the credential file
   3. **Conversion to AuthorizedUserCredentials** for signing operations (same 
pattern as standard authorized_user)
   4. **Builder integration** to handle the new credential type in selection 
logic
   
   The implementation follows the same OAuth2 refresh flow as standard 
`authorized_user` credentials, but uses the custom `token_url` endpoint 
(typically `https://sts.googleapis.com/v1/oauthtoken`) specified in the 
credential file.
   
   ## Changes
   
   **Files Modified:**
   - `src/gcp/credential.rs`: Added ExternalAccountAuthorizedUserCredentials 
struct, enum variant, and TokenProvider implementation
   - `src/gcp/builder.rs`: Updated credential selection logic to handle new type
   - `src/gcp/mod.rs`: Added integration test
   
   **Lines Changed:** +314 additions across 3 files
   
   ## Testing
   
   ### Unit Tests
   - ✅ Deserialization with full JSON format
   - ✅ Deserialization with minimal required fields  
   - ✅ Conversion to AuthorizedUserCredentials for signing
   - ✅ Builder construction with sample credentials
   
   ### Integration Tests
   - ✅ End-to-end test with put/get/delete operations (when TEST_INTEGRATION=1)
   - ✅ Manual test with real ADC credentials (#[ignore])
   
   **Test Results:**
   ```
   test result: ok. 114 passed; 0 failed; 3 ignored
   ```
   
   All existing tests continue to pass with no regressions.
   
   ## Credential Format Example
   
   ```json
   {
     "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_store` with their standard ADC configuration, 
matching the behavior of official Google Cloud client libraries (Python, Java, 
Go, etc.).
   
   ## References
   
   - [Google Cloud Workforce Identity 
Federation](https://cloud.google.com/iam/docs/workforce-identity-federation)
   - [Terraform Issue 
#34234](https://github.com/hashicorp/terraform/issues/34234) - Similar issue in 
Terraform


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to