2009-10-07 2 views
1

2 개의 웹 응용 프로그램이 있습니다. 하나는 ASP.Net 웹 응용 프로그램이고 다른 하나는 ASP.Net WCF 웹 서비스 응용 프로그램입니다. 나는 WFC 웹 애플 리케이션의 서비스를 소비하는 웹 애플 리케이션 싶습니다. 결국이 두 앱은 방화벽을 통해 통신하게됩니다.ASP.Net 웹 응용 프로그램의 로그온 된 사용자 세부 정보를 WCF 서비스에 전달하는 방법은 무엇입니까?

사용자가 양식 인증을 사용하여 클라이언트 웹 응용 프로그램에 로그온하고 wcf 서비스에서 인증 한 다음 사용자의 역할에 따라 서비스 리소스에 액세스 할 수있게하려고합니다.

지금까지 IsLoggedIn 서비스 메서드를 반환 할 수 없었지만 System.Web.ApplicationServices.AuthenticationService를 사용하여 로그온 한 적이 있습니다. 그러나 클라이언트 웹 응용 프로그램은 사용자가 로그인했음을 인식합니다.

또한, OperationContext.Current.ServiceSecurityContext.PrimaryIdentity에서 사용자를 인식하는 더미 서비스를 만들었으며 로그 된 것으로 생각했습니다. 실제로는 인식하는 ServiceClient.ClientCredentials.UserName 인 것으로 나타났습니다. 로그인 한 사용자의 세부 정보를 WCF 서비스에 어떻게 전달할 수 있습니까?

로그온 한 사용자에게 ClientCredentials.UserName을 설정할 수 있지만 암호를 얻는 방법을 생각할 수 없습니다.

내가 완전히 잘못된 접근법을 사용하고 있습니까? 아니면 제가 누락 된 것이 있습니까? 어떤 조언을 주시면 감사하겠습니다.

이 내 바인딩 구성입니다 :

<wsHttpBinding> 
    <binding name="wsHttp"> 
     <security mode="Message"> 
     <message clientCredentialType="UserName" 
      negotiateServiceCredential="false" 
      establishSecurityContext="false"/> 
     </security> 
    </binding> 
    </wsHttpBinding> 

덕분에, 이안

답변

0

내가, 당신이 당신의 ASP.NET, 바로 WCF 서비스에 대한 사용자 자격 증명을 기록 전달해야 제대로 이해한다면? 이 방법을 시도해보십시오


using (YourServiceClient client = new YourServiceClient()) 
{ 
    client.ClientCredentials.Windows.AllowedImpersonationLevel = 
      System.Security.Principal.TokenImpersonationLevel.Impersonation; 
    client.ChannelFactory.Credentials.Windows.ClientCredential = 
      CredentialCache.DefaultNetworkCredentials; 
    client.YourMethodHere(); 
} 
+0

안녕하세요. 루벤스, 귀하의 회신에 감사드립니다. 폼 인증 자격 증명이 아닌 Windows 자격 증명을 통과하기 때문에 작동하지 않을까 걱정됩니다. 감사합니다. Iain – Iain

0
당신은 확실히 HttpContext.Current.User.Identity.Name 재산 사용하여 ASP.NET에서 현재 로그온 한 사용자를 검색 할 수 있습니다

-를 호출에 사용할 사용자의 암호를 검색하기 위해, 일반적으로는 어떤 방법이없는됩니다 문제 WCF 서비스.

정말 양식 인증 방법에 따라 다릅니다. 나 자신의 가게가 있니? 이 상점에는 사용자 비밀번호가 사용할 수있는 형식으로되어 있습니까? 일반 텍스트 (나쁜 아이디어!) 또는 되돌릴 수있는 암호화 스키마에 저장된 사용자의 비밀번호입니까?

마크

+0

암호가 단방향 해시되어 있으므로 암호를 검색 할 수 없도록 기본 SQL Server 저장소를 사용하고 있습니다. 사용자가 처음 로그온 할 때 비밀번호를 저장할 수는 있지만 피할 수없는 내용입니다. 모든 호출에 대해 단일 사용자를 하드 코딩하고 로그온 한 사용자 이름을 매개 변수로 전달하는 것이 더 좋을 것이라고 생각합니다. – Iain

+0

나는 두려웠다 :-)이 경우에 나는 불행히도 이것을 어떻게 할 수 있는지 정말로 모르겠다. ASP.Net 사이트와 WCF 서비스간에 인증을위한 인증서가 있어야하며 "로그인 한"사용자 이름을 메시지 헤더로 보내 정보를 얻으십시오. 사용자가 ASP.NET 웹 사이트에 대해 이미 인증을 받았다면 모든 것이 잘되어야합니다. 맞습니까? –

0

저는 SharePoint에서 비슷한 것을 시도하고 있습니다. 내가 가지고 올 수 있었던 가장 좋은 방법은 다음과 같습니다

using (ChannelFactory<IMyContract> requestChannelFactory = new ChannelFactory<IMyContract>(binding, new EndpointAddress(endPointURL))) 
{ 
    provider = requestChannelFactory.CreateChannel(); 
    using (HostingEnvironment.Impersonate()) 
    { 
     remoteData = provider.GetData(); 
    } 
} 

이 도메인 \ 서버 $ 나를 인증을 시도하지만 불행히도 나는 HttpContext를 밖으로 클라이언트 자격 증명을 끌어와 구둣 주걱 할 수있는 방법을 발견하지 않았습니다 requestChannelFactory.Credentials.Windows.ClientCredential에 추가합니다. 나는 그것을 할 수 없다고 확신한다. 대안은 사용자 이름/암호를 하드 코딩하거나 인증서 인증을 사용하는 것 같습니다. 그 또는 나를 위해 옵션이 아닌 익명 인증을 허용하거나.