8

既存のデータベースの上に ASP.NET の認証と承認を実装しようとしています。データを取得するために Web サービスを呼び出す Web サイトがあります。Web サービスを使用するには、ユーザー名とパスワードを入力する必要があります。そのことを踏まえて、IIdentity と IPrincipal を実装して、暗号化されたパスワードを保存し、Web サービス呼び出しの実行時にそれを提供できるようにすることにしました。将来的には、asp.net の組み込みセキュリティをさらに使用する可能性があるため、メンバーシップとロール プロバイダーを実装し、必要なもの (ValidateUser と GetRoles) だけをオーバーライドします。ただし、メンバーシップ プロバイダーのおかげでユーザーを検証した後実装 必要に応じてパスワードを取得できるように、独自の CustomIdentity を Context.User に設定しています。

ユーザーがページへのアクセスを許可されている限り、完全に機能しています。ただし、ユーザーが拒否されると、AccessDeniedException をスローする代わりに、フレームワークは CustomIdentity でシリアライゼーション例外をスローします。このリンク に詳細が記載されている完全に類似した動作を見つけましたが、回答は投稿されていません。

私の例外は、上記のリンクとまったく同じです


Type is not resolved for member'CW.CustomAuthentication.CWIdentity,CW.CustomAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Runtime.Serialization.SerializationException: Type is not resolved for member 'CW.CustomAuthentication.CWIdentity,CW.CustomAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[SerializationException: Type is not resolved for member 'CW.CustomAuthentication.CWIdentity,CW.CustomAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.]
   Microsoft.VisualStudio.WebHost.Connection.get_RemoteIP() +0
   Microsoft.VisualStudio.WebHost.Request.GetRemoteAddress() +65
   System.Web.HttpRequest.get_UserHostAddress() +18
   System.Web.HttpRequest.get_IsLocal() +13
   System.Web.Configuration.CustomErrorsSection.CustomErrorsEnabled(HttpRequest request) +86
   System.Web.HttpContext.get_IsCustomErrorEnabled() +42
   System.Web.Configuration.UrlAuthFailedErrorFormatter.GetErrorText(HttpContext context) +16
   System.Web.Security.UrlAuthorizationModule.WriteErrorMessage(HttpContext context) +29
   System.Web.Security.UrlAuthorizationModule.OnEnter(Object source, EventArgs eventArgs) +8777783
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

メンバーシップとカスタム IIdentity および IPrincipal を同時に使用することは正しいですか? そうでない場合、メンバーシップ プロバイダーとロール プロバイダーを使用する場合、パスワードやその他のユーザーデータなどのプロパティをどこに追加すればよいですか?

よろしくお願いします、

ステファン・エルブレック

4

5 に答える 5

8

投稿したリンクによると、さらにテストした後、このエラーは、ビジュアルスタジオからデバッグモードで実行した場合にのみ発生しているようです。プロジェクトを IIS で実行するように設定すると、エラーはなくなり、セキュリティの実装は期待どおりに機能します。

---それは、Visual Studio に実装されている軽量 Web サーバーのバグですか?---

編集: Web プロジェクトの [プロパティ] に移動し、[Web] タブに移動して、[ローカル IIS サーバーを使用する] をオンにします。ただし、これには Visual Studio を管理者として実行し、マシンに IIS をインストールして、VS がプロジェクトをロードするときにローカル IIS サーバーに仮想ディレクトリを作成できるようにする必要があります。

于 2009-08-17T10:01:00.313 に答える
6

私の場合、単純に から継承する必要がありましたMarshalByRefObject

public class IcmtrIdentity :  MarshalByRefObject, IIdentity
{
   ...
}
于 2012-10-03T13:18:48.977 に答える
4

これは正しい答えではないかもしれませんが、私もこの問題を抱えていましたが、修正しました。

もともと、継承GenericIdentity(または実装IIdentity)されたカスタムクラスがありました。GenericPrincipal最終的に継承(または実装)するカスタム クラスを作成したときIPrincipal、すべてが機能しましたか?

私のCustomPrincipalクラスは継承するだけGenericPrincipalで、基本コンストラクターを呼び出す1つのコンストラクターを持っていました。

CustomPrincipalとクラスの両方は、何かまたはものをCustomIdentity含意しませんでした。繰り返しになりますが、私のクラスはすべて非常に基本的でした。SerializationISerializable

于 2011-03-21T08:07:10.993 に答える
2

Web プロジェクトの [プロパティ] に移動し、[Web] タブに移動して、[ローカル IIS サーバーを使用する] をオンにします。ただし、これには Visual Studio を管理者として実行し、マシンに IIS をインストールして、VS がプロジェクトをロードするときにローカル IIS サーバーに仮想ディレクトリを作成できるようにする必要があります。

CustomIdentity を使用して Web アプリを実行しようとすると、同じ問題が発生しました。VS 2008 で IIS を使用するようにプロジェクトを設定するには、Web アプリケーション プロジェクトでアプリケーション プールへの URL を定義する必要があります。

于 2011-03-07T16:10:47.483 に答える
1

これは、カスタム ID を含むアセンブリを開発マシンの GAC に追加することでも解決できます。

于 2013-04-16T01:29:02.963 に答える