2

この段階で私が提供している実際の情報が不足しているため、ロングショットだと思います. 問題を再現する方法の詳細を喜んで提供しますが、見逃していた問題がないかどうかを確認するために、迅速なフィードバックが必要でした.

私は Facebook Auth Provider で遊んでいる単純な ServiceStack ハロー ワールド アプリケーションを持っています。

  • バニラ ServiceStack
  • バニラ Facebook 認証プロバイダー
  • バニラ ユーザー セッション
  • バニラ OrmLite ユーザー リポジトリ
  • バニラ OrmLite MySql Db Factory

ローカル マシンでデバッグする場合 - Windows 7 (および 8)。すべてがうまくいきます。サービスが起動し、データベース テーブルが作成され、Facebook 経由でログインできるようになり、関連するテーブルにレコードが挿入されます。

Vagrant Box 内の Ubuntu でサービスを実行すると (仮想化のプロバイダーとして Virtual Box で実行され、mono-fastcgi を使用して nginx でホストされます)、サービスが正しく起動し、MySql データベースにテーブルが作成されていることがわかります。ヒットすると、Facebook/auth/facebook正しく転送されますが、サービスへのコールバックが発生するとエラーが発生します。

これは現在の出力です:

[Auth: 07/30/2013 13:02:47]: [REQUEST: {provider:facebook}] System.NullReferenceException: Object reference not set to an instance of an object at 
ServiceStack.ServiceInterface.Auth.FacebookAuthProvider.Authenticate (ServiceStack.ServiceInterface.IServiceBase,ServiceStack.ServiceInterface.Auth.IAuthSession,ServiceStack.ServiceInterface.Auth.Auth) <0x0061e> at 
ServiceStack.ServiceInterface.Auth.AuthService.Authenticate (ServiceStack.ServiceInterface.Auth.Auth,string,ServiceStack.ServiceInterface.Auth.IAuthSession,ServiceStack.ServiceInterface.Auth.IAuthProvider) <0x000a7> at 
ServiceStack.ServiceInterface.Auth.AuthService.Post (ServiceStack.ServiceInterface.Auth.Auth) <0x00303> at 
ServiceStack.ServiceInterface.Auth.AuthService.Get (ServiceStack.ServiceInterface.Auth.Auth) <0x00013> at (wrapper dynamic-method) object.lambda_method (System.Runtime.CompilerServices.Closure,object,object) <0x0004f> at 
ServiceStack.ServiceHost.ServiceRunner`1<ServiceStack.ServiceInterface.Auth.Auth>.Execute (ServiceStack.ServiceHost.IRequestContext,object,ServiceStack.ServiceInterface.Auth.Auth) <0x00416>

localhost:8080それは明らかにサービスに到達しています(ポート80のゲストマシンにマップする経由でアクセスしています)。エラーは ServiceStack 出力に適切にラップされているためです。

誰も手がかりを持っていないと思いますか?

4

1 に答える 1

2

調査の夜の後、わかりました - 根本的な原因を見つけました。

FacebookAuthProvider.cs の 51行目は WebRequestExtensions.cs の 28 行目を呼び出します。これは WebRequestExtensions.cs の 227 行目を呼び出します。

このメソッド呼び出しは 255 行目で失敗します。これは基本的に、Mono がデフォルトで SSL 証明書を信頼しないためです.

Mono の正しい構成を理解する代わりに、(少なくとも当分の間は)厄介なルートをとりました。AppHostBase.Configure私の実装で次の行を使用する:

F#

System.Net.ServicePointManager.ServerCertificateValidationCallback <- new RemoteCertificateValidationCallback(fun _ _ _ _ -> true)

C#

System.Net.ServicePointManager.ServerCertificateValidationCallback += (a, b, c, d) => { return true; };

私は今、稼働中です (完全に機能するデス・スターのように)。

于 2013-07-31T00:15:57.847 に答える