c# ASP.NET MVC 5가 WebMatrix SimpleMembershipProvider와 호환되지 않습니까?




asp.net-mvc asp.net-mvc-5 (4)

우리는 ASP.NET MVC 4 & Web API를 기반으로하는 기존 애플리케이션을 보유하고 있습니다. 사이트의 관리자 부분은 단순 회원을 사용합니다. MVC 5 / Web API 2로 응용 프로그램을 업그레이드하여 새로운 기능을 추가하는 데 관심이 있습니다. 그러나 호환되지 않는 것처럼 보입니다.

특히 NuGet에서 내 솔루션의 프로젝트 중 하나에 RC 패키지를 설치하고 web.config 정보를 업데이트 한 후 WebSecurity.InitializeDatabaseConnection() 을 호출하는 행에서 시작할 때 응용 프로그램이 죽기 시작합니다.이 예외는 다음과 같습니다.

[MethodAccessException: Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(System.Object, WebMatrix.Data.ConnectionEventArgs)' to access security critical method 'System.Web.WebPages.HttpContextExtensions.RegisterForDispose(System.Web.HttpContextBase, System.IDisposable)' failed.]
   WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(Object sender, ConnectionEventArgs e) +70
   WebMatrix.Data.Database.OnConnectionOpened() +70
   WebMatrix.Data.Database.EnsureConnectionOpen() +51
   WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63
   WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +13
   WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, String userIdColumn, String userName) +206
   WebMatrix.WebData.SimpleMembershipProvider.ValidateUserTable() +87

Simple Memberhip을 사용하는 동일한 솔루션의 다른 프로젝트는 업그레이드 하지 않고 계속해서 잘 작동합니다.

더 많은 정보를 얻기 위해 인터넷 검색을하는 것은 물론 그 예외에 대한 많은 히트를 보여 주지만 WebMatrix에는 특별한 것이 없습니다.

FWIW : Microsoft가 (또 다른) 멤버쉽 및 ID 솔루션 을 도입했음을 알고 있지만, 기존 Simple Membership 테이블 또는 기존 사용자 데이터 모두에 대한 원활한 마이그레이션 경로를 사용하지 않는 한 실제로는 옵션이 아닙니다. 우리를 위해.

업데이트 (10 월 11 일)

난 그냥 우리의 애플 리케이션의 현재 트렁크의 신선한 체크 아웃이 다시 시도. Visual Studio 2012를 사용하고 있지만 그렇지 않은 경우 MS의 지침에 따라 기존 프로젝트를 업그레이드합니다. MVC 5 / Web API 2 / EF 6으로 업데이트 한 후 앱이 정상적으로 실행되었습니다.

제거 할 web.config 에는 명시 적 신뢰 요구 사항이 없습니다. 이 질문 의 코드를 Global.asax.cs 추가했으며, 앱이 완전 신뢰 (IIS Express, VS에서 F5-ed)로 실행되고 있다고보고합니다.

InitializeDatabaseConnection() 동일한 호출을 다시 추가하면 똑같은 예외로 죽어 가기 시작합니다.

해결책 (10 월 28 일)

금요일부터 @ Kevin의 업데이트로 솔루션을 시험해 본 결과 작동하는 것으로 나타났습니다. 이 솔직히 무관 한 패키지를 추가하면 이러한 보안 문제가 해결 될 것이고, 솔루션에서 패키지를 제거한 후에는 이상하지 않은 것이 이상하다는 생각이 들었습니다.

어떤 일이 발생했는지 자세히 살펴보면이 문제를 해결하는 이유가 매우 간단하다는 것을 알았습니다. Microsoft.AspNet.WebHelpers 패키지에는 내 솔루션에 추가되는 두 가지 종속성이 있습니다. Microsoft.AspNet.WebPages.DataMicrosoft.AspNet.WebPages.WebData . Microsoft는 WebMatrix 클래스를 새로운 패키지로 옮겼습니다.

그래서 헬퍼 패키지가 문제를 수정했기 때문에, 그것이 무엇을했기 때문에가 아니라 고장난 어셈블리의 업데이트 된 버전 을 내 솔루션에 추가 하게 만들었 기 때문입니다. 초기 비 호환성에 대한 해결책은 NuGet에서 다른 모든 것을 업데이트 할 때 다음 패키지를 설치하는 것입니다.

Install-Package Microsoft.AspNet.WebPages.WebData

업데이트 (2015 년 5 월 13 일)

두 번째 새 패키지를 수동으로 설치해야 할 수도 있습니다.

Install-Package Microsoft.AspNet.WebPages.Data

이 패키지는 첫 번째 패키지 의 명시 적 종속성 이며 NuGet이 둘 다 설치하기에 충분히 똑똑해야하므로이 작업은 반드시 필요한 것은 아닙니다 . 그러나 빌드 할 때 오류가 발생 하거나 NuGet이 종속성을 추가하는 것을 보지 못하면 도움이 될 수 있습니다.


현재 Simple Membership에서 ASP.NET Identity로 마이그레이션하기위한 마이그레이션 문서 작업을 진행 중입니다. 이 마이그레이션 문서를 작성할 때까지 2 주 동안 조정 해주십시오. 지금은 Simple Membership 스키마를 Identity에 매핑하고 SignIN / SIgnOut에 OWIN을 사용하도록 응용 프로그램 코드를 변경해야합니다


WebMatrix는 MVC 5와 호환됩니다.

내가 한 것은 빈 MVC 5 프로젝트를 가져 와서 SimpleMembership과 MVC 애플리케이션분리 하는 SimpleSecurity 사용하여 WebMatrix SimpleMembershipProvider를 통합하는 것입니다. 지금까지 데이터베이스를 만들고 시드하고 로그인 및 로그 아웃 할 수있었습니다. 전자 메일 확인 및 다양한 테스트와 같은 다른 기능을이 참조 응용 프로그램에 추가 할 계획입니다. 완료되면 SimpleSecurity Project에 소스 코드를 게시합니다.

추측을해야한다면 업그레이드 프로세스에 문제가있을 수 있습니다. MVC 4 프로젝트를 MVC 5로 업그레이드하기 위해 어떤 과정을 밟았습니까? 이 과정을 수행 했습니까 ? 어떤 버전의 WebMatrix 어셈블리를 사용하고 있습니까? 사용중인 Visual Studio의 버전은 무엇입니까? WebMatrix 및 Visual Studio 2013 RC 버전 2.0.0.0을 사용하고 있습니다.

업데이트 (2013 년 10 월 25 일)

MVC 5 프로젝트에 SimpleMembership을 추가하는 실험을 계속했고 파산 한 라인을 따라 어딘가에 @Sixten Otto와 같은 결과를 얻었습니다. 추가 할 때 점진적으로 테스트하지는 않았지만 웹 API 어셈블리를 설치했을 때 문제가 발생할 수 있습니다. 새 MVC 5 프로젝트를 만들 때 기본적으로 설치되지 않습니다.

나는이 오류에 대해 좀 더 연구했고 " 보안 투명한 메서드 시도 'WebMatrix.WebData.PreApplicationStartCode.Start ()' 라는 제목의이 품질 보증을 보았습니다 . 이것은 오래된 QA이며 원래 MVC 3 앱을 MVC 4로 업그레이드 할 때 이와 동일한 오류가 발생했습니다. 그러나 최근에 사람들은 MVC 5 로의 업그레이드와 관련해 답변을 추가하고 있습니다. 나를위한 솔루션은 Microsoft.AspNet.WebHelpers 라는 NuGet 패키지를 설치하는 것입니다. 이 패키지를 설치 한 후 모든 것이 잘 동작했습니다.

새로운 ASP.NET ID로 마이그레이션하기위한 연구에 대한 참고 사항은 동일한 암호 해시를 사용하지 않기 때문에 이전 멤버를 ASP.NET ID에서 사용하는 데이터베이스로 옮기는 것을 방지 할 수 있습니다. ASP.NET Identity는 현재 실제 흐름에있는 것처럼 보이므로 아마도이 문제에 대한 해결책을 찾아 낼 것입니다.

업데이트 (2/16/14)

저는 암호에 대한 해쉬 알고리즘이 SimpleMembership과 ASP.NET Identity에서 서로 다르다고 잘못보고했습니다. 필자는 해시 된 암호가 육안에있는 해시 된 암호 일 뿐이라는 가정하에 해시 된 암호를 육안으로 검사 한 것으로 가정했습니다. 추가 연구 후 SimpleMembership이 암호를 해싱하기 위해 System.Web.Helpers.Crypto 클래스를 사용하고 실제로 암호 필드에 저장된 내용이 실제로 256 비트 서브 키와 소금임을 알게되었습니다. 이 정보를 통해 ASP.NET Identity가 SimpleMembership에 의해 생성 된 암호를 확인할 수 있는지 확인하기위한 몇 가지 검사를 실시하고 통과했습니다. 나는 해시 알고리즘 SimpleMembership을 사용하여 SimpleMembership webiste에서 ASP.NET Identity를 사용하는 것으로 데이터를 마이그레이션 할 수있는 ASP.NET Identity의 암호 해시를 연결할 수 있는지 알아 내려고했습니다. 필요 없다고 밝혀졌습니다. 암호 해시 및 SimpleMembership에서 ASP.NET Identity로 데이터를 마이그레이션하는 방법에 대해 자세히 설명 합니다.


오류가 발생하는 경우

보안 투명 메서드 'WebMatrix.WebData.PreApplicationStartCode.Start ()'로 보안 중요 메서드 'System.Web.WebPages.Razor.WebPageRazorHost.AddGlobalImport (System.String)'에 액세스하지 못했습니다.

이 문제를 해결하려면 NuGet 패키지 관리자를 사용하여이 패키지를 설치하십시오.

Install-Package Microsoft.AspNet.WebHelpers

그 후에 아마 다른 오류가 발생할 것입니다.

WebMatrix.Data 버전 3.0.0.0 어셈블리를로드 할 수 없습니다.

이 패키지를 설치하려면 NuGet 패키지 관리자를 사용하여이 패키지를 설치하십시오.

Install-Package Microsoft.AspNet.WebPages.Data

내 로컬 컴퓨터가 아니라 라이브 사이트에서 동일한 문제가 발생했습니다.

나는 web config에서 줄 아래로 제거했고 지금은 작동 중이다.

<dependentAssembly>
   <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
   <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>




asp.net-identity