@@ -17,6 +17,7 @@ limitations under the License.
1717package  config
1818
1919import  (
20+ 	"crypto/rsa" 
2021	"fmt" 
2122	"net/http" 
2223	"net/http/httptest" 
@@ -25,6 +26,7 @@ import (
2526
2627	"github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" 
2728	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" 
29+ 	"github.com/Azure/azure-sdk-for-go/sdk/azidentity" 
2830	"github.com/Azure/go-autorest/autorest/adal" 
2931	"github.com/Azure/go-autorest/autorest/azure" 
3032	"github.com/stretchr/testify/assert" 
@@ -311,14 +313,14 @@ func TestGetServicePrincipalToken(t *testing.T) {
311313		assert .NoError (t , err )
312314		pfxContent , err  :=  os .ReadFile ("./testdata/test.pfx" )
313315		assert .NoError (t , err )
314- 		certificate , privateKey , err  :=  adal . DecodePfxCertificateData (pfxContent , "id" )
316+ 		certificates , privateKey , err  :=  azidentity . ParseCertificates (pfxContent , [] byte ( "id" ) )
315317		assert .NoError (t , err )
316- 		spt , err  :=  adal .NewServicePrincipalTokenFromCertificate (* oauthConfig , config .AADClientID , certificate , privateKey , env .ServiceManagementEndpoint )
318+ 		spt , err  :=  adal .NewServicePrincipalTokenFromCertificate (* oauthConfig , config .AADClientID , certificates [ 0 ] , privateKey .( * rsa. PrivateKey ) , env .ServiceManagementEndpoint )
317319		assert .NoError (t , err )
318320		assert .Equal (t , token , spt )
319321	})
320322
321- 	t .Run ("setup with SP and  certificate ( no certificate  password) " , func (t  * testing.T ) {
323+ 	t .Run ("setup with SP with  certificate has  no password" , func (t  * testing.T ) {
322324		config  :=  & AzureAuthConfig {
323325			ARMClientConfig : azclient.ARMClientConfig {
324326				TenantID : "TenantID" ,
@@ -336,12 +338,54 @@ func TestGetServicePrincipalToken(t *testing.T) {
336338		assert .NoError (t , err )
337339		pfxContent , err  :=  os .ReadFile ("./testdata/testnopassword.pfx" )
338340		assert .NoError (t , err )
339- 		certificate , privateKey , err  :=  adal . DecodePfxCertificateData (pfxContent , "" )
341+ 		certificates , privateKey , err  :=  azidentity . ParseCertificates (pfxContent , nil )
340342		assert .NoError (t , err )
341- 		spt , err  :=  adal .NewServicePrincipalTokenFromCertificate (* oauthConfig , config .AADClientID , certificate , privateKey , env .ServiceManagementEndpoint )
343+ 		spt , err  :=  adal .NewServicePrincipalTokenFromCertificate (* oauthConfig , config .AADClientID , certificates [ 0 ] , privateKey .( * rsa. PrivateKey ) , env .ServiceManagementEndpoint )
342344		assert .NoError (t , err )
343345		assert .Equal (t , token , spt )
344346	})
347+ 
348+ 	t .Run ("setup with SP with certificate has multi public key" , func (t  * testing.T ) {
349+ 		config  :=  & AzureAuthConfig {
350+ 			ARMClientConfig : azclient.ARMClientConfig {
351+ 				TenantID : "TenantID" ,
352+ 			},
353+ 			AzureAuthConfig : azclient.AzureAuthConfig {
354+ 				AADClientID :       "AADClientID" ,
355+ 				AADClientCertPath : "./testdata/testmultipublickey.pem" ,
356+ 			},
357+ 		}
358+ 		env  :=  & azure .PublicCloud 
359+ 		token , err  :=  GetServicePrincipalToken (config , env , "" )
360+ 		assert .NoError (t , err )
361+ 
362+ 		oauthConfig , err  :=  adal .NewOAuthConfigWithAPIVersion (env .ActiveDirectoryEndpoint , config .TenantID , nil )
363+ 		assert .NoError (t , err )
364+ 		pfxContent , err  :=  os .ReadFile ("./testdata/testmultipublickey.pem" )
365+ 		assert .NoError (t , err )
366+ 		certificates , privateKey , err  :=  azidentity .ParseCertificates (pfxContent , nil )
367+ 		assert .NoError (t , err )
368+ 		// expected public key is in second bag 
369+ 		certificate  :=  certificates [1 ]
370+ 		spt , err  :=  adal .NewServicePrincipalTokenFromCertificate (* oauthConfig , config .AADClientID , certificate , privateKey .(* rsa.PrivateKey ), env .ServiceManagementEndpoint )
371+ 		assert .NoError (t , err )
372+ 		assert .Equal (t , token , spt )
373+ 	})
374+ 
375+ 	t .Run ("setup with SP with certificate has no public key" , func (t  * testing.T ) {
376+ 		config  :=  & AzureAuthConfig {
377+ 			ARMClientConfig : azclient.ARMClientConfig {
378+ 				TenantID : "TenantID" ,
379+ 			},
380+ 			AzureAuthConfig : azclient.AzureAuthConfig {
381+ 				AADClientID :       "AADClientID" ,
382+ 				AADClientCertPath : "./testdata/testnopublickey.pem" ,
383+ 			},
384+ 		}
385+ 		env  :=  & azure .PublicCloud 
386+ 		_ , err  :=  GetServicePrincipalToken (config , env , "" )
387+ 		assert .Error (t , err )
388+ 	})
345389}
346390
347391func  TestGetMultiTenantServicePrincipalToken (t  * testing.T ) {
@@ -393,14 +437,31 @@ func TestGetMultiTenantServicePrincipalToken(t *testing.T) {
393437
394438		pfxContent , err  :=  os .ReadFile ("./testdata/testnopassword.pfx" )
395439		assert .NoError (t , err )
396- 		certificate , privateKey , err  :=  adal . DecodePfxCertificateData (pfxContent , "" )
440+ 		certificates , privateKey , err  :=  azidentity . ParseCertificates (pfxContent , nil )
397441		assert .NoError (t , err )
398- 		spt , err  :=  adal .NewMultiTenantServicePrincipalTokenFromCertificate (multiTenantOAuthConfig , config .AADClientID , certificate , privateKey , env .ServiceManagementEndpoint )
442+ 		spt , err  :=  adal .NewMultiTenantServicePrincipalTokenFromCertificate (multiTenantOAuthConfig , config .AADClientID , certificates [ 0 ] , privateKey .( * rsa. PrivateKey ) , env .ServiceManagementEndpoint )
399443		assert .NoError (t , err )
400444
401445		assert .Equal (t , multiTenantToken , spt )
402446	})
403447
448+ 	t .Run ("setup with SP with certificate has no public key" , func (t  * testing.T ) {
449+ 		config  :=  & AzureAuthConfig {
450+ 			ARMClientConfig : azclient.ARMClientConfig {
451+ 				TenantID :                "TenantID" ,
452+ 				NetworkResourceTenantID : "NetworkResourceTenantID" ,
453+ 			},
454+ 			AzureAuthConfig : azclient.AzureAuthConfig {
455+ 				AADClientID :       "AADClientID" ,
456+ 				AADClientCertPath : "./testdata/testnopublickey.pem" ,
457+ 			},
458+ 			NetworkResourceSubscriptionID : "NetworkResourceSubscriptionID" ,
459+ 		}
460+ 		env  :=  & azure .PublicCloud 
461+ 		_ , err  :=  GetMultiTenantServicePrincipalToken (config , env , nil )
462+ 		assert .Error (t , err )
463+ 	})
464+ 
404465	t .Run ("setup with MSI and auxiliary token provider" , func (t  * testing.T ) {
405466		const  (
406467			managedIdentityToken  =  "managed-identity-token" 
@@ -493,14 +554,32 @@ func TestGetNetworkResourceServicePrincipalToken(t *testing.T) {
493554
494555		pfxContent , err  :=  os .ReadFile ("./testdata/testnopassword.pfx" )
495556		assert .NoError (t , err )
496- 		certificate , privateKey , err  :=  adal . DecodePfxCertificateData (pfxContent , "" )
557+ 		certificates , privateKey , err  :=  azidentity . ParseCertificates (pfxContent , nil )
497558		assert .NoError (t , err )
498- 		spt , err  :=  adal .NewServicePrincipalTokenFromCertificate (* oauthConfig , config .AADClientID , certificate , privateKey , env .ServiceManagementEndpoint )
559+ 		spt , err  :=  adal .NewServicePrincipalTokenFromCertificate (* oauthConfig , config .AADClientID , certificates [ 0 ] , privateKey .( * rsa. PrivateKey ) , env .ServiceManagementEndpoint )
499560		assert .NoError (t , err )
500561
501562		assert .Equal (t , token , spt )
502563	})
503564
565+ 	t .Run ("setup with SP with certificate has no public key" , func (t  * testing.T ) {
566+ 		config  :=  & AzureAuthConfig {
567+ 			ARMClientConfig : azclient.ARMClientConfig {
568+ 				TenantID :                "TenantID" ,
569+ 				NetworkResourceTenantID : "NetworkResourceTenantID" ,
570+ 			},
571+ 			AzureAuthConfig : azclient.AzureAuthConfig {
572+ 				AADClientID :       "AADClientID" ,
573+ 				AADClientCertPath : "./testdata/testnopublickey.pem" ,
574+ 			},
575+ 			NetworkResourceSubscriptionID : "NetworkResourceSubscriptionID" ,
576+ 		}
577+ 		env  :=  & azure .PublicCloud 
578+ 
579+ 		_ , err  :=  GetNetworkResourceServicePrincipalToken (config , env , nil )
580+ 		assert .Error (t , err )
581+ 	})
582+ 
504583	t .Run ("setup with MSI and auxiliary token provider" , func (t  * testing.T ) {
505584		const  (
506585			managedIdentityToken  =  "managed-identity-token" 
0 commit comments