【问题标题】:Securing WebSharper remote calls保护 WebSharper 远程调用
【发布时间】:2013-11-07 13:12:56
【问题描述】:

引用 WebSharper 2.5 alpah 文档,远程处理组件假定:

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

有没有办法保护远程调用,以便它们只能从经过身份验证的客户端调用?

【问题讨论】:

  • 当然,传递一个身份验证令牌。

标签: f# websharper


【解决方案1】:

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】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      相关资源
      最近更新 更多