Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invalid provider type specified when trying to access google analytics

We keep getting the error below whenever we try to access the API to get current user numbers. I've tried a few things but cannot get to the bottom of this. Can anyone shed any light on whats wrong/missing?

I should point out that thus runs perfectly fine on my local PC but is failing on the server.

Here is the error:

ConnectToAnalytics error: System.Security.Cryptography.CryptographicException: Invalid provider type specified. at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle) at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair() at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize) at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() at Google.Apis.Auth.OAuth2.ServiceAccountCredential.Initializer.FromCertificate(X509Certificate2 certificate) in C:\Users\mdril\Documents\GitHub\google-api-dotnet-client\Src\GoogleApis.Auth.DotNet4\OAuth2\ServiceAccountCredential.cs:line 100 at Core.ConnectToAnalytics()

This error is thrown when i run the code:

Public Shared Function GetRealtimeUsers() As String
    Try
        'realtime on site
        Dim gsService As AnalyticsService = Core.ConnectToAnalytics
        Dim RequestRealtime As DataResource.RealtimeResource.GetRequest = gsService.Data.Realtime.[Get]([String].Format("ga:{0}", "xxxxx"), "rt:activeUsers")
        Dim feed As RealtimeData = RequestRealtime.Execute()

        Return Int(feed.Rows(0)(0)).ToString()
    Catch ex As Exception
        Return "QUOTA USED"
    End Try

It error's here: RequestRealtime.Execute()

For reference - here's the connect script:

Public Shared Function ConnectToAnalytics() As AnalyticsService
    Try
        Dim scopes As String() = New String() {AnalyticsService.Scope.Analytics, AnalyticsService.Scope.AnalyticsEdit, AnalyticsService.Scope.AnalyticsManageUsers, AnalyticsService.Scope.AnalyticsReadonly}
        Dim keyFilePath = HttpContext.Current.Server.MapPath("\xxx.p12")
        Dim serviceAccountEmail = "xxx"
        Dim certificate = New X509Certificate2(keyFilePath, "xxxx", X509KeyStorageFlags.Exportable)
        Dim credential = New ServiceAccountCredential(New ServiceAccountCredential.Initializer(serviceAccountEmail) With {.Scopes = scopes}.FromCertificate(certificate))
        Return New AnalyticsService(New BaseClientService.Initializer() With {.HttpClientInitializer = credential, .ApplicationName = "Client for xxx"})
    Catch ex As Exception
        Core.SendAdminStatusReport("ConnectToAnalytics error: " & ex.ToString)
        Throw ex
    End Try
End Function
like image 910
Ben Williams Avatar asked Nov 25 '25 13:11

Ben Williams


1 Answers

I found the fix for this in this post:

https://www.daimto.com/azure-with-service-accounts-in-c/

Changing this line

var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable);

to

var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);

Fixed my issue

like image 181
Rod Paddock Avatar answered Nov 28 '25 03:11

Rod Paddock



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!