@@ -21,6 +21,7 @@ import (
2121 "net/http"
2222 "regexp"
2323 "strconv"
24+ "strings"
2425 "time"
2526
2627 "cloud.google.com/go/auth"
@@ -32,6 +33,10 @@ import (
3233const (
3334 timeoutMinimum = 5 * time .Second
3435 timeoutMaximum = 120 * time .Second
36+
37+ universeDomainPlaceholder = "UNIVERSE_DOMAIN"
38+ defaultTokenURL = "https://sts.UNIVERSE_DOMAIN/v1/token"
39+ defaultUniverseDomain = "googleapis.com"
3540)
3641
3742var (
@@ -176,12 +181,25 @@ func (o *Options) validate() error {
176181 return nil
177182}
178183
184+ // resolveTokenURL sets the default STS token endpoint with the configured
185+ // universe domain.
186+ func (o * Options ) resolveTokenURL () {
187+ if o .TokenURL != "" {
188+ return
189+ } else if o .UniverseDomain != "" {
190+ o .TokenURL = strings .Replace (defaultTokenURL , universeDomainPlaceholder , o .UniverseDomain , 1 )
191+ } else {
192+ o .TokenURL = strings .Replace (defaultTokenURL , universeDomainPlaceholder , defaultUniverseDomain , 1 )
193+ }
194+ }
195+
179196// NewTokenProvider returns a [cloud.google.com/go/auth.TokenProvider]
180197// configured with the provided options.
181198func NewTokenProvider (opts * Options ) (auth.TokenProvider , error ) {
182199 if err := opts .validate (); err != nil {
183200 return nil , err
184201 }
202+ opts .resolveTokenURL ()
185203 stp , err := newSubjectTokenProvider (opts )
186204 if err != nil {
187205 return nil , err
@@ -282,7 +300,6 @@ func (tp *tokenProvider) Token(ctx context.Context) (*auth.Token, error) {
282300// subjectTokenProvider
283301func newSubjectTokenProvider (o * Options ) (subjectTokenProvider , error ) {
284302 reqOpts := & RequestOptions {Audience : o .Audience , SubjectTokenType : o .SubjectTokenType }
285-
286303 if o .AwsSecurityCredentialsProvider != nil {
287304 return & awsSubjectProvider {
288305 securityCredentialsProvider : o .AwsSecurityCredentialsProvider ,
0 commit comments