인증을 위해 ASP.NET 로그인 컨트롤을 사용하고 있습니다.ASP.NET 회원 - 동일한 웹 응용 프로그램에서 WebService를 호출하면 인증 된 사용자가 손실됩니다.
일부 사용자가 있으며 성공적으로 로그인 할 수 있습니다. 인증을 받으면 helloworld.aspx 페이지로 리디렉션됩니다. Page_Load 메서드에서 먼저 Membership.GetUser()를 호출합니다. 이렇게하면 인증 된 사용자가 올바르게 반환됩니다. 그런 다음 동일한 웹 응용 프로그램에있는 간단한 WCF 웹 서비스를 호출합니다. 내 WebService 호출의 첫 번째 줄은 동일한 Membership.GetUser()입니다. 이 시간은 NULL을 반환하지만.
의견이 있으십니까?
감사합니다, 저스틴 여기
는 일부 코드가
JustinPage.aspx
public partial class JustinPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
MembershipUser user = Membership.GetUser();
// user is a valid user
JustinService.JustinTestServiceClient justin = new CMS.WEB.JustinService.JustinTestServiceClient();
justin.DoWork();
}
}
JustinTestService.svc.cs 이전 서비스의 소스 코드를 언급 한 바와 같이
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class JustinTestService
{
[OperationContract]
public void DoWork()
{
MembershipUser user = Membership.GetUser();
// user is NULL ??? Why?
return;
}
}
을 니펫입니다 Justin.aspx와 동일한 웹 응용 프로그램에 있습니다. 당신이
엔드 포인트 주소 = (내 응용 프로그램은 포트 19003에 고정되어 주) 엔드 포인트로 볼 수 있습니다에 "http : // localhost를 : 19003/서비스/JustinTestService.svc" 바인딩 = "은 BasicHttpBinding"bindingConfiguration = " BasicHttpBinding_JustinTestService " 계약 ="JustinService.JustinTestService "이름 ="BasicHttpBinding_JustinTestService "바인딩/
또한이 같은 바인딩 외모...
< 이름 ="BasicHttpBinding_JustinTestService "closeTimeout ="0시 1분 0초 " openTimeout = "00:01:00"receiveTimeout = "00:10:00"sendTimeout = "00:01:00" allowCookies = "false"를 bypassProxyOnLocal = "false"를 hostNameComparisonMode = "StrongWildcard" 해당 MaxBufferSize = "65536"maxBufferPoolSize = "524288"maxReceivedMessageSize = "65536" messageEncoding = "텍스트"textEncoding = "UTF-8"된 transferMode는 = "버퍼" useDefaultWebProxy = "true"로 > < readerQuotas MAXDEPTH = "32"maxStringContentLength = "8192"maxArrayLength = "16384" maxBytesPerRead = "4096"maxNameTableCharCount = "16384"/ > < 보안 모드 = '없음'> </security > </binding >
아마도 < 보안 모드 = "없음"과 관련이 있습니다 > ???
흠 ... 같은
뭔가 ... 확인 동의했다. 모든 클라이언트가 통신 할 공통 계약을 만들고 싶기 때문에 의도적으로이 작업을 수행했습니다. 이 웹 애플리케이션에 동일한 애플리케이션에 있기 때문에 Business Layer에 특별한 액세스 권한을 부여하고 싶지 않습니다. 모든 클라이언트 응용 프로그램은 동일한 API를 사용해야합니다. 따라서 권장 솔루션은 서비스를 직접 호출하는 것입니까? 나는이 작품이 이미 알고 있지만 어쩌면 정확하지 않을 수도 있습니다. – Justin
현재 로그인 한 사용자의 자격 증명을 가져와 웹 서비스로 보낼 수 있다고 가정하겠습니다.하지만 안전하다고 확신하지 못합니다. 웹 서비스가 외부 또는 내부에 열려 있습니까? – pgb