問題は、OpenId 認証プロバイダーが nginx/1.1.19、Mono JIT コンパイラ バージョン 3.1.1、fastcgi-mono-server4.exe 2.10.0.0 を使用する Ubuntu 12.04 で動作しないことです。
DotNetOpenAuth 4.3.0.0 にアタッチされている ServiceStack.Authentication.OpenId を含む ServiceStack 参照はすべて Nuget を介して取得され、バージョン 3.9.55.0 です。
このプロジェクトは ServiceStack テンプレート CustomPath40 に基づいており、すべてのプロジェクトは Win7x64 上の VS2012 を使用して .NET 4 で構築されています。
IIS8/IIS8 Express では、すべての認証が完全に正常に機能します。SocialBootstrapApi をエミュレートして、AppHost で authproviders を構成しました。Twitter と Facebook の認証は、一度実行すると mono で問題なく動作します。
mozroots --import --ask-remove
これは、典型的な mozilla 証明書を信頼します。
OpenId プロバイダーは、log4net dll が不足していると文句を言いますが (これも mono でのみ)、適切な log4net dll を提供すると、そのエラーが静かになります。現在、OpenId プロバイダー (Google と Yahoo) は両方とも例外をスローします。
Method not found: 'System.Security.Cryptography.HashAlgorithm.Dispose'.
[Auth: 07/26/2013 04:21:13]:
[REQUEST: {provider:GoogleOpenId}] System.MissingMethodException: Method not found: 'System.Security.Cryptography.HashAlgorithm.Dispose'. at
DotNetOpenAuth.OpenId.HmacShaAssociation/HmacSha.CreateHasher (byte[]) <0x00017> at
DotNetOpenAuth.OpenId.HmacShaAssociation.CreateHasher () <0x0001b> at
DotNetOpenAuth.OpenId.Association.Sign (byte[]) <0x00034> at
DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement.GetSignature (DotNetOpenAuth.OpenId.ChannelElements.ITamperResistantOpenIdMessage,DotNetOpenAuth.OpenId.Association) <0x001f3> at
DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement.ProcessIncomingMessage (DotNetOpenAuth.Messaging.IProtocolMessage) <0x00133> at
DotNetOpenAuth.Messaging.Channel.ProcessIncomingMessage (DotNetOpenAuth.Messaging.IProtocolMessage) <0x001b1> at
DotNetOpenAuth.OpenId.ChannelElements.OpenIdChannel.ProcessIncomingMessage (DotNetOpenAuth.Messaging.IProtocolMessage) <0x000f3> at
DotNetOpenAuth.Messaging.Channel.ReadFromRequest (System.Web.HttpRequestBase) <0x00359> at
DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.GetResponse (System.Web.HttpRequestBase) <0x00053> at
DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.GetResponse () <0x0006f> at
ServiceStack.Authentication.OpenId.OpenIdOAuthProvider.Authenticate (ServiceStack.ServiceInterface.IServiceBase,ServiceStack.ServiceInterface.Auth.IAuthSession,ServiceStack.ServiceInterface.Auth.Auth) <0x00693> at
ServiceStack.ServiceInterface.Auth.AuthService.Authenticate (ServiceStack.ServiceInterface.Auth.Auth,string,ServiceStack.ServiceInterface.Auth.IAuthSession,ServiceStack.ServiceInterface.Auth.IAuthProvider) <0x0004f> at
ServiceStack.ServiceInterface.Auth.AuthService.Post (ServiceStack.ServiceInterface.Auth.Auth) <0x00247> 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) <0x001de>
明らかな問題は、https ://bugzilla.xamarin.com/show_bug.cgi?id=3375 で詳しく説明されているものですが、これは 1 年以上前に 2.10.x で解決済みとしてマークされていますが、この 3.1.1 をビルドしました。先週のタグ付けされたソースから。
この例外を修正して、Mono で OpenId Auth プロバイダーを動作させるにはどうすればよいですか?