@@ -139,6 +139,17 @@ func (s EnvironmentSettings) addWorkloadIdentityProvider(creds *[]azcore.TokenCr
139139 }
140140}
141141
142+ func (s EnvironmentSettings ) addSpiffeWorkloadIdentityProvider (creds * []azcore.TokenCredential , errs * []error ) {
143+ if c , e := s .GetSpiffeWorkloadIdentity (); e == nil {
144+ cred , err := c .GetTokenCredential ()
145+ if err == nil {
146+ * creds = append (* creds , cred )
147+ } else {
148+ * errs = append (* errs , err )
149+ }
150+ }
151+ }
152+
142153func (s EnvironmentSettings ) addManagedIdentityProvider (timeout time.Duration , creds * []azcore.TokenCredential , errs * []error ) {
143154 c := s .GetMSI ()
144155 msiCred , err := c .GetTokenCredential ()
@@ -172,6 +183,8 @@ func (s EnvironmentSettings) addProviderByAuthMethodName(authMethod string, cred
172183 s .addClientCertificateProvider (creds , errs )
173184 case "workloadidentity" , "wi" :
174185 s .addWorkloadIdentityProvider (creds , errs )
186+ case "spiffeworkloadidentity" , "spiffe" :
187+ s .addSpiffeWorkloadIdentityProvider (creds , errs )
175188 case "managedidentity" , "mi" :
176189 s .addManagedIdentityProvider (1 * time .Second , creds , errs )
177190 case "commandlineinterface" , "cli" :
@@ -180,22 +193,23 @@ func (s EnvironmentSettings) addProviderByAuthMethodName(authMethod string, cred
180193}
181194
182195func getAzureAuthMethods () []string {
183- return []string {"clientcredentials" , "creds" , "clientcertificate" , "cert" , "workloadidentity" , "wi" , "managedidentity" , "mi" , "commandlineinterface" , "cli" , "none" }
196+ return []string {"clientcredentials" , "creds" , "clientcertificate" , "cert" , "workloadidentity" , "wi" , "spiffeworkloadidentity" , "spiffe" , " managedidentity" , "mi" , "commandlineinterface" , "cli" , "none" }
184197}
185198
186199// GetTokenCredential returns an azcore.TokenCredential retrieved from the order specified via
187200// the azureAuthMethods component metadata property which denotes a comma-separated list of auth methods to try in order.
188201// The possible values contained are (case-insensitive):
189- // ServicePrincipal, Certificate, WorkloadIdentity, ManagedIdentity, CLI
202+ // ServicePrincipal, Certificate, WorkloadIdentity, SPIFFEWorkloadIdentity, ManagedIdentity, CLI
190203// The string "None" can be used to disable Azure authentication.
191204//
192205// If the azureAuthMethods property is not present, the following order is used (which with the exception of step 5
193206// matches the DefaultAzureCredential order):
194207// 1. Client credentials
195208// 2. Client certificate
196209// 3. Workload identity
197- // 4. MSI (we use a timeout of 1 second when no compatible managed identity implementation is available)
198- // 5. Azure CLI
210+ // 4. SPIFFE workload identity
211+ // 5. MSI (we use a timeout of 1 second when no compatible managed identity implementation is available)
212+ // 6. Azure CLI
199213func (s EnvironmentSettings ) GetTokenCredential () (azcore.TokenCredential , error ) {
200214 // Create a chain
201215 var creds []azcore.TokenCredential
@@ -212,10 +226,13 @@ func (s EnvironmentSettings) GetTokenCredential() (azcore.TokenCredential, error
212226 // 3. Workload identity
213227 s .addWorkloadIdentityProvider (& creds , & errs )
214228
215- // 4. MSI with timeout of 1 second (same as DefaultAzureCredential)
229+ // 4. SPIFFE workload identity
230+ s .addSpiffeWorkloadIdentityProvider (& creds , & errs )
231+
232+ // 5. MSI with timeout of 1 second (same as DefaultAzureCredential)
216233 s .addManagedIdentityProvider (1 * time .Second , & creds , & errs )
217234
218- // 5 . AzureCLICredential
235+ // 6 . AzureCLICredential
219236 // We omit this if running in a cloud environment
220237 if ! isCloudServiceWithManagedIdentity () {
221238 s .addCLIProvider (30 * time .Second , & creds , & errs )
0 commit comments