2009-03-09 7 views
1

私はSilverlightを使用しているシステムで作業しており、WCFを使用してサーバー側のすべての作業を行うサービスを呼び出しています。Silverlight/WCFログインセッション

システムにユーザーログオンが必要です。確認が済むと、サーバーへのすべての呼び出しにユーザー情報が含まれている必要があります。そのため、サーバーはセキュリティポリシーをチェックし、そのユーザーに基づいて操作を実行できます。

これを行うにはどのような方法が最適ですか?いくつかの種類のユーザークラスを作成して呼び出しごとにサーバーに送信できますが、SilverlightまたはWCFでこれを行うより良い方法がありますか?

答えて

2

標準的なトークンベースのアプローチを使用します。サーバーにログインすると(必要なすべての情報をユーザークラスから渡すことで)、サーバーはトークンで応答します。他のすべてのサーバー呼び出しには、有効なトークンが必要です。サーバーは、トークンが有効であることを確認します(一定時間後に自動的に有効期限が切れます)。また、同じマシン/ユーザーからのものであることを確認します(たとえば、IPアドレスを確認できます)。

これはおそらく私が実装する方法です。すべてのサーバー呼び出しですべてのユーザー情報を渡す必要はありません。 (イントラネット上にいる場合は、偽装などを使用することができます)

0

Silverlightコントロールは、Silverlightコントロールがクライアント側のコントロールであるため、直接セッション変数にアクセスできません。しかし、Silverlightでセッションを管理するWCFサービスを呼び出すことができます。

wcfサービスでセッション変数を次のように設定する必要があります。

<ServiceContract(Namespace:="")> _ 
<AspNetCompatibilityRequirements 
(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> _ 
Public Class PersonService 
    <OperationContract()> _ 
    Public Sub DoWork() 
     ' Add your operation implementation here 
    End Sub 
    ' Add more operations here and mark them with <OperationContract()> 

    <OperationContract()> _ 
    Public Sub SetSessionVariable(ByVal Sessionkey As String) 
     System.Web.HttpContext.Current.Session("Key") = Sessionkey 
     System.Web.HttpContext.Current.Session.Timeout = 20 
    End Sub 
    <OperationContract()> _ 
    Public Function GetSessionVariable() As String 
     Return System.Web.HttpContext.Current.Session("Key") 
    End Function 

End Class 

サービスをsilverlightアプリケーションで参照すると、.xamlページでセッション変数を次のように設定できます。

Dim client As Service.PersonServiceClient = New Service.PersonServiceClient() 
'Calls the SetSessionVariable() and store values in the session. 
client.SetSessionVariableAsync("Soumya") 

We will get the session variable in the .xaml page by calling GetSessionVariable() where we want to check the session 

Dim client As Service.PersonServiceClient = New Service.PersonServiceClient() 
AddHandler client.GetSessionVariableCompleted, AddressOf client_GetSessionVariableCompleted 
client.GetSessionVariableAsync() 

Private Sub client_GetSessionVariableCompleted(ByVal sender As Object, ByVal e As GetSessionVariableCompletedEventArgs) 
     Try 
      If Not String.IsNullOrEmpty(e.Result) Then 
       MessageBox.Show(e.Result) 
      Else 
       MessageBox.Show("Your session has been expired") 
      End If 
     Catch ex As FaultException   
     End Try 
End Sub 
関連する問題