2009-08-20 6 views
2

WCF 연결로 Silverlight를 만들었습니다. Silverlight에서 사용자 로그인 후 세션을 만들고 유지 관리하고 다음을 수행하고 싶습니다.Silverlight에서 세션 유지 보수

로그인에 성공한
  • , 세션 객체 저장 세션 ID, 사용자 ID, 사용자 이름, 세션 상태 WCF와 더 통화에
  • 을 생성, 세션 정보는
WCF에 실버 라이트에서 전달 될 필요가

한 가지 해결책은 세션 개체를 만들어 모든 메서드에 매개 변수로 전달하는 것입니다.

멤버 변수를 전달하지 않고 모든 웹 서비스 호출에서 정보를 전달하는 다른 방법이 있습니까?

ASP.NET의 영구 세션 개체와 비슷한 기능을 제공합니다.

답변

3

매번 세션 정보를 전달 하시겠습니까?

ASP.NET을 사용하여 ASP 호환 모드에서 WCF 서비스를 호스팅하는 경우 인스턴스 모드를 세션으로 설정 한 다음 모든 것을 WCF 서비스 인스턴스 변수에 저장할 수 있습니다. 또는 ASP 세션 개체에서.

각 요청마다이 모든 데이터를 보내는 데 귀하의 요점을 알 수 없습니다.

ASP.NET에서 SL을 사용할 때 좋은 점은 ASP.NET 기본 인증 Like here을 사용하여 로그인 한 다음 WCF 서비스를 호출하고 HttpContext.Current.User.Identity.IsAuthenticated이 true인지 확인하는 것입니다.

+1

Silverlight를 사용하는 경우 BasicHttpBinding 만 지원되므로 인스턴스화 모드를 Session으로 설정할 수 없습니다. – Phil

+0

확실한가요? 나는 서버 쪽에서 세션 GUID를 얻는다. 실제로 모든 세션을 "손으로"잠그기 때문에 실제로 "세션 당 새 인스턴스 만들기"를 시도하지 않았습니다. – R4cOON

0

우선, Silverlight는 asp.net이 아니며, WCF는 상태를 유지하도록 특별히 설계된 경우를 제외하고는 디자인 상 무국적입니다.

실버 라이트 3에 상태를 유지하려면 정적 속성이있는 정적 클래스를 만들고 페이지 전체에서 이러한 값을 유지하면됩니다. 그러나 이것은 우아한 해결책이 아닙니다. 이것은 SL이 clientside 런타임이기 때문에 가능하며 URL을 탐색 할 때 다운로드되는 xap 어셈블리 내에 앱이 있으므로 기본적으로 Windows 데스크톱 앱을 다운로드 한 다음 제한된 보안 컨텍스트에서 실행하는 것과 같습니다. 나는 지금 이것의 함축적 의미에 빠지기를 원치 않는다. 그러나 이것이 중요하다는 것을 당신은 알고있다.

문제를 해결하기 위해 더 좋은 방법은 실제로 applicationsettings에 데이터를 저장하고 응용 프로그램이 시작될 때 그것을 다시 사용할 수 있습니다 이렇게 너무

 IsolatedStorageSettings.ApplicationSettings.Remove("UserName"); 
     IsolatedStorageSettings.ApplicationSettings.Add("UserName", UserName); 
     IsolatedStorageSettings.ApplicationSettings.Remove("Password"); 
     IsolatedStorageSettings.ApplicationSettings.Add("Password", UserPassword); 

처럼 IsolatedStorage를 사용하는 것입니다. IsolatedStorage에 저장된 모든 정보는 기본적으로 평문이며 동일한 도메인/사이트에서만 액세스 할 수 있습니다.

다른 보안 체계 중 하나를 사용하여 WCF 서비스를 보호해야하며, SL3에서 WCF 서비스로 전송하는 정보는 일반 텍스트로되어 있으며 약간의 노력을 기울이면 누구나 읽을 수 있으며 누구나 wcf 서비스에 전화 할 수 있습니다 SL 앱을 완전히 우회하므로 모든 것을 안전하게 보호해야합니다.

+5

격리 된 저장소는 암호화되지 않으므로 저장하기 전에 해당 데이터의 보안을 설정하십시오. –

+0

Silverlight는 IsolatedStorage에 저장하기 전에 사용자 암호를 보호하기 위해 RSA 암호화를 지원하지 않습니다. 어쨌든 필자는 그러한 정보 유형 (암호 또는 로그인)을 쉽게 격리 할 수 ​​있으므로 격리 된 저장소에 넣지 않는 것이 좋습니다. 일종의 해시를 저장하더라도 해당 값을 도난 당해 다른 격리 된 저장소에 적용 해보십시오. –

0

Silverlight에서의 WCF 인증은 액세스 할 수없는 SOAP 헤더를 통해 수행됩니다. 요청한대로 Silverlight에서 WCF로 인증 정보를 전달할 수 없습니다. ASP.NET 응용 프로그램 서비스를 사용하여 사용자 인증을 수행한다고 가정 할 때 (이 기술은 내가 여기서 알 수있는 유일한 기술입니다) 기본 전략은 ValidateUser 메서드를 호출하여 로그인을 수행하고 Silverlight 컨트롤에 SOAP 헤더에 해당 사용자 세션 정보를 포함시킨 다음 WCF 서비스를 호출합니다. 배후에 사용자를 로깅하여 주기적으로 세션을 새로 고치거나 자격 증명을 기반으로 WCF 호출이 실패 할 때까지 기다린 다음 사용자를 다시 확인하십시오. 적은 비용으로 다시 인증 할 필요가있을 수있는 WCF 서비스를 호출하는 데 몇 가지 생존 측면이 있는지를 잘 모릅니다.

당신은 다른 포스터에 의해 제안 격리 된 저장소에 사용자의 로그인 및 암호를 저장하지만 데이터가 첫째, 그것은 모호한 위치에 일반 텍스트로 저장하고 안전하지 않습니다 있다는 암호화 확인을 만들 수 있습니다.

0

마지막 목표는 브라우저가 열려있는 한 사용자 변수를 임시로 저장하는 것입니다.선량에 관계없이 데이터가 메가 바이트가 아니라면 앱 또는 클래스의 메모리에있는 변수 또는 리소스에 임시로 저장하므로 컴퓨터에서 로컬로 표시되는 것에 대해 걱정할 필요가 없습니다. 브라우저 세션이 끝나면 사라집니다.

WCF 호출에 대한
App.Current.Resource.Add("MySessionItem", item) 

, ASP.net 응용 프로그램 서비스 (예 : My.User.Identity)와 당신을위한 authenication이 그 전달에 따라 WCF 방법으로 인증하지 않습니다 ASP.net을 수 있도록 시도 임시 변수 및/또는 자원에 저장하는 매개 변수.

+0

여기에서는 ASP.Net을 사용한다고 가정합니다. 그건 어리석은 가정입니다. 주 클라이언트는 Silverlight 일 수 있지만 브라우저가 아닌 다른 종류의 클라이언트가있을 수도 있습니다. 특히 자동화 또는 데이터 가져 오기/내보내기. – Christopher

1

브라우저에서 쿠키를 사용하는 경우 세션이 자동으로 처리됩니다. 빈 Global.asax 파일을 웹 응용 프로그램에 추가하기 만하면 첫 번째 브라우저 요청시 세션이 자동으로 만들어집니다.

1

흠 .. 당신은을 수행 할 수 있도록 DB를 사용할 수 있습니다 ..

이는 일이 ...

  1. 실버 APP는 WCF 로그인 서비스
  2. WCF 로그인 서비스를 인증 보내 확인하고
  3. WCF 로그인이 후자의 사용 01 unauthorizedlogin
  4. 실버 라이트 앱 스토어 글로벌 로그인 변수에 성공적으로 로그인에 true와 false 반환됩니다 DB 세션에서 세션을 생성
  5. 지금 당신은 당신의 애플 리케이션과 서버 :)에 대한 정보를

다음 문제 : 1. 어떻게 서버에 세션을 삭제하려면? * 단지 버튼을 로그 아웃 만들고 * 데이터베이스 에서 세션을 제거하고 (세션 변수/로그인 변수) 당신의 애플 리케이션을위한 글로벌 변수를 제거하기 위해 서비스를 호출

  1. 사용자가 로그 아웃을 클릭하지 않을 경우 어떻게 단추?

      서버 사이트에서 주기적으로 활성 세션 검사를 수행하십시오. 더 이상 활성화되어 있지 않으면 제거하십시오.
  2. 기본적으로, 당신은 당신이 사용자 :) 인증 확인하는 서비스의 모든 전화를 인터넷을 통해 사용자의 세션 ID를 전송해야

주 : 글쎄, 다른 방법이 없다, 서비스는 무국적이기 때문에