인증이 ClientFormsAuthenticationMembershipProvider 공급자와 작동하지 않는 이유를 확인하기 위해 실행할 수있는 간단한 진단이 있습니까? 내 문제 :회원 유효성 검사 사용자 요청에 어떤 문제가 있습니까? (ClientFormsAuthenticationMembershipProvider 사용)
회원 및 역할 관리 모두에 AspNetSqlMembershipProvider 공급자를 사용하도록 구성된 서버 A에서 호스팅되는 웹 사이트 ("인증 자"웹 사이트라고합니다)가 있습니다.
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="MMMS35.API"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="Moose"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="1"
passwordStrengthRegularExpression="" />
</providers>
</membership>
<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider"
connectionStringName="MMMS35.API"
applicationName="Moose"
type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear />
<add name="AspNetSqlRoleProvider"
connectionStringName="MMMS35.API"
applicationName="Moose"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
내가 ("테스트 클라이언트"웹 사이트라고 함) 다른 웹 사이트가이 같은 네트워크에있는 서버 B에서 호스팅 : 해당 웹 사이트에 대한 (내가 생각하는 것은) 관련 Web.config의 키는이 있습니다 서버 A이지만 서버 A & 사이에 네트워크 경로, 라우터 구성 등이 무엇인지 알 수 있습니다. 테스트 클라이언트에는 ClientFormsAuthenticationMembershipProvider 공급자를 사용하여 "인증 자"웹 사이트에 인증을 요청하는 모의 로그인 설정이 있습니다 테스트 클라이언트에 제공된 자격 증명. 테스트 클라이언트의 관련 Web.config의 섹션이 있습니다, 그러나
System.UnauthorizedAccessException: Access to the path 'C:\Documents and Settings\Default User\Application Data\Microsoft Corporation\Internet Information Services\6.0.3790.3959' is denied.
:
DirectCast(Membership.Provider, ClientServices.Providers.ClientFormsAuthenticationMembershipProvider).ValidateUser(UserName.Text, Password.Text)
내가 예외가 : 테스트 클라이언트이 줄을 실행
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<clear/>
<add name="ClientAuthenticationMembershipProvider"
type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
serviceUri="http://slmooseapp1/mia/Authentication_JSON_AppService.axd"
credentialsProvider=""
savePasswordHashLocally="False"/>
</providers>
</membership>
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
<providers>
<clear/>
<add name="ClientRoleProvider"
type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
serviceUri="http://slmooseapp1/mia/Role_JSON_AppService.axd"
cacheTimeout="1"/>
</providers>
</roleManager>
정확히 동일한 web.config serviceUri 경로 (예 : 내 클라이언트 멤버 자격 공급자가 서버 A의 동일한 인증 웹 사이트를 가리키고 있음)를 사용하여 개발 상자 (서버 B가 아님)에서 테스트 클라이언트를 실행하고 사용자에 대한 역할을 얻는 것은 완벽하게 작동합니다.
서버 B에서 브라우저를 열고 인증 웹 사이트에서 페이지를 요청하면 인증 웹 앱이 제대로 실행되므로 서버 B에서 서버 A로 http 요청을 성공적으로 수행 할 수 있음을 알게됩니다. 서버 폼 B에서 서버 A로 JSON 요청을 만들려고 할 때 실패하는 ClientFormsAuthenticationMembershipProvider는 어떻게됩니까?
EDIT (2009년 9월 21일) : 나는 인증 웹 사이트 (내 개발 시스템이 아닌) 같은 상자에서 테스트 클라이언트와 지금이 시나리오를 시도했습니다
. 그것은 여전히 실패합니다. 나는 ... 프로그램 원시 HTTP 요청을 쓴 성공적인 응답을받을 DID
요청 :
Content-Type: application/json
Host: slappdev
Content-Length: 70
Expect: 100-continue
Connection: Keep-Alive
{"userName":"mdh","password":"test123","createPersistentCookie":false}
응답 :
그래서MicrosoftOfficeWebServer: 5.0_Pub
Content-Length: 10
Cache-Control: private, max-age=0
Content-Type: application/json; charset=utf-8
Date: Mon, 21 Sep 2009 20:10:13 GMT
Set-Cookie: AppName=1756811D52C4619AC78...; path=/; HttpOnly
Server: Microsoft-IIS/6.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
{"d":true}
, 내 생각을 통해 작업하는 동안 뭔가 잘못된 것입니다 .Net 프레임 워크는 ValidateUser에서 실제 HTTP 요청으로 이동하도록 호출합니다. 어떤 아이디어?
편집 (2009년 9월 22일) :
던져 예외 내 테스트 클라이언트 웹 페이지가 System.Windows.Forms.Application.UserAppDataPath에 액세스를 시도 할 때 같이 던져 동일한 예외입니다. 클라이언트 웹 응용 프로그램의 web.config 파일에서 유효한 연결 문자열 이름을 가리키는 membership/providers/add 키에 connectionStringName 특성을 추가하면 예외가 변경됩니다!
따라서 모든 회원 기능이 serviceUri를 사용하고 있다면 클라이언트에서 로컬로 시도되는 이유는 무엇입니까? 그리고 클라이언트 멤버십 공급자를 지원하기 위해 이러한 새 테이블/개체를 데이터베이스에 추가하려면 어떤 유틸리티를 실행해야합니까?
아주 좋음 - 시도해 보겠습니다. 고맙습니다. –
이 web.config 노드를 인증 서버 앱과 테스트 앱에 모두 추가했습니다. 또한 이벤트 로그를 켰습니다. 이벤트 로그에 메시지가 나타나지 않으며 C : \ temp에 파일이 생성되지 않습니다. –