2013-10-13 77 views
3

從WebSharper 2.5 alpah文檔的遠程組件假定報價:確保WebSharper遠程調用

RPC可調用的方法是安全的由未認證的客戶端從網絡調用。

無論如何要保護遠程通話,以便他們只能從經過身份驗證的客戶端調用嗎?

+0

當然,傳遞一個認證令牌。 – t0yv0

回答

5

一位在WebSharper網站的樣本是,似乎通過提供返回認證令牌的登錄方法,然後需要調用其他功能來做到這一點聊天應用:

[<Rpc>] 
let Login (user: string) : Option<Auth.Token> = 
    let s = State.Get() 
    if s.Users.ContainsKey user then 
     None 
    else 
     // (snip) 
     user |> Auth.Generate |> Some 

[<Rpc>] 
let Poll (auth: Auth.Token) (time: int) = 
    // (snip) 

完整的聊天示例可以在這裏找到:http://www.websharper.com/samples/Chat

2

剛剛一直在玩這個自己。原來,如果你使用Forms Authentication,你可以從RPC方法中讀取當前的HTTPContext,所以你可以這樣做:

[<Rpc>] 
let protectedMethod() = 
    match IntelliFactory.WebSharper.Sitelets.UserSession.GetLoggedInUser() with 
    | Some(username) -> 
    // User is authenticated... do stuff 
    () 
    | None -> failwith "Authentication failed"