保护WebSharper远程调用

时间:2013-10-13 17:04:28

标签: f# websharper

从WebSharper 2.5 alpah docs引用远程处理组件假设:

  

未经身份验证的客户端可以安全地从Web调用RPC-callable方法。

无论如何都要保护远程呼叫,以便只能从经过身份验证的客户端调用它们?

2 个答案:

答案 0 :(得分:5)

WebSharper网站上的一个示例是一个聊天应用程序,它似乎通过提供一个返回身份验证令牌的Login方法来实现这一点,然后需要调用其他函数:

[<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

答案 1 :(得分:2)

我自己一直在玩这个。事实证明,如果您使用的是表单身份验证,则可以从RPC方法中读取当前的HTTPContext,这样您就可以执行以下操作:

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