我尝试在现有数据库上实现ASP.NET身份验证和授权。我们有一个网站调用Web服务来获取数据。为了使用Web服务,我需要提供用户名和密码。因此,我决定实现IIdentity和IPrincipal来存储加密的密码,并能够在执行Web服务调用时提供它。将来,我们可能希望使用更多内置于ASP.NET的安全功能,因此我实现了成员资格和角色提供程序,并仅覆盖我需要的内容(ValidateUser和GetRoles)。然而,在通过成员资格提供程序实现验证用户后,我仍然将自己的CustomIdentity设置为Context.User,以便在需要时检索其密码。
只要用户被允许访问页面,它就可以完美地工作。但是当用户被拒绝时,框架会抛出一个Serialization异常,而不是AccessDeniedException。我发现这个链接上描述了更多详细信息的完全相似的行为,但没有答案被发布。
我的异常与上面链接中的完全相同。
成员'CW.CustomAuthentication.CWIdentity,CW.CustomAuthentication,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'的类型未解析。 描述:在当前Web请求执行期间发生未处理的异常。请查看堆栈跟踪以获取有关错误的更多信息以及其在代码中的起源位置。
异常详细信息:System.Runtime.Serialization.SerializationException:成员'CW.CustomAuthentication.CWIdentity,CW.CustomAuthentication,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'的类型未解析。
源错误:
在当前Web请求执行期间生成了一个未处理的异常。可以使用下面的异常堆栈跟踪来识别异常的来源和位置。
堆栈跟踪:
[SerializationException: 成员'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
只要用户被允许访问页面,它就可以完美地工作。但是当用户被拒绝时,框架会抛出一个Serialization异常,而不是AccessDeniedException。我发现这个链接上描述了更多详细信息的完全相似的行为,但没有答案被发布。
我的异常与上面链接中的完全相同。
成员'CW.CustomAuthentication.CWIdentity,CW.CustomAuthentication,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'的类型未解析。 描述:在当前Web请求执行期间发生未处理的异常。请查看堆栈跟踪以获取有关错误的更多信息以及其在代码中的起源位置。
异常详细信息:System.Runtime.Serialization.SerializationException:成员'CW.CustomAuthentication.CWIdentity,CW.CustomAuthentication,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'的类型未解析。
源错误:
在当前Web请求执行期间生成了一个未处理的异常。可以使用下面的异常堆栈跟踪来识别异常的来源和位置。
堆栈跟踪:
[SerializationException: 成员'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
同时使用成员身份(membership)和自定义IIdentity和IPrincipal是否正确?如果不正确,如果我使用成员身份和角色提供程序,应该在哪里添加密码或其他用户数据属性?
最好的问候,
Stephane Erbrech
CW.CustomAuthentication.CWIdentity
可序列化吗?您是否测试过它是否可以使用BinaryFormatter
进行序列化? - John Saunders