42

私は Google アナリティクス API を使用しており、この SO の質問に従って OAuth を設定しました: https://stackoverflow.com/a/13013265/1299363

ここに私のOAuthコードがあります:

public void SetupOAuth ()
{
    var Cert = new X509Certificate2(
        PrivateKeyPath, 
        "notasecret", 
        X509KeyStorageFlags.Exportable);
    var Provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, Cert)
    {
        ServiceAccountId = ServiceAccountUser,
        Scope = ApiUrl + "analytics.readonly"
    };
    var Auth = new OAuth2Authenticator<AssertionFlowClient>(Provider, AssertionFlowClient.GetState);
    Service = new AnalyticsService(Auth);
}

PrivateKeyPath は、Google API コンソールによって提供される秘密鍵ファイルのパスです。これは私のローカル マシンでは完全に機能しますが、テスト サーバーにプッシュすると、

System.Security.Cryptography.CryptographicException: An internal error occurred.

次のスタック トレースを使用 (無関係な部分を削除):

System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) +33
System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx) +0
System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags) +237
System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password, X509KeyStorageFlags keyStorageFlags) +140
Metrics.APIs.GoogleAnalytics.SetupOAuth() in <removed>\Metrics\APIs\GoogleAnalytics.cs:36
Metrics.APIs.GoogleAnalytics..ctor(String PrivateKeyPath) in <removed>\Metrics\APIs\GoogleAnalytics.cs:31

そのため、ファイルの読み込みに問題があるように見えます。渡された PrivateKeyPath を確認しましたが、正しい場所を指しています。

何か案は?これがサーバー、ファイル、コードなどの問題なのかどうかはわかりません。

4

5 に答える 5

84

私の頭に浮かぶことの1つは、アプリプールのIDです。ユーザープロファイルの読み込みがオンになっていることを確認してください。オンになっていないと、暗号サブシステムが機能しません。

于 2013-01-10T17:59:18.013 に答える
13

X509KeyStorageFlags も指定してみてください

    var certificate = new X509Certificate2(KeyFilePath, KeyFilePassword, 
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | 
X509KeyStorageFlags.Exportable);
于 2014-05-14T09:58:49.720 に答える
-2

いいえ、「File.Exists(...)」も詳細設定ですか?私は 3 つのプールを持っていましたが、それらはすべて「ユーザー プロファイルの読み込み」に対して true が有効になっていました。コードはコンソールアプリとしては問題なく機能しましたが、MVC で問題が発生したため、私の問題は依存関係と NuGet パッケージに関係している可能性があると考えています。

于 2014-03-04T10:19:58.507 に答える