code: func AuthenticateServicePrincipal(env azure.Environment, subscriptionID, spID, spPassword string) (*azure.ServicePrincipalToken, error) {
  	tenantID, err := loadOrFindTenantID(env, subscriptionID)
  	if err != nil {
  		return nil, err
  	}
  	oauthCfg, err := env.OAuthConfigForTenant(tenantID)
  	if err != nil {
  		return nil, fmt.Errorf("Failed to obtain oauth config for azure environment: %v", err)
  	}
  
  	spt, err := azure.NewServicePrincipalToken(*oauthCfg, spID, spPassword, getScope(env))
  	if err != nil {
  		return nil, fmt.Errorf("Failed to create service principal token: %+v", err)
  	}
  	return spt, nil
  }
docs: // AuthenticateServicePrincipal uses given service principal credentials to return a
  // service principal token. Generated token is not stored in a cache file or refreshed.