用于UI和API访问的REST方法

时间:2015-05-13 18:19:10

标签: api rest authentication flask

民间:

这是一个REST设计问题,并非特定于任何编程语言。我正在创建一个通过REST API访问的应用程序后端。我想对UI和基于API的访问使用相同的API。我试图找出验证用户的最佳方法,以便我可以重复使用相同的方法。

我目前对身份验证的看法如下:

API用户

这些用户获得用户GUID和预共享对称密钥。在每个API请求中,它们都包含其他标头或请求参数,其中包含:

  1. 他们的GUID
  2. 包含用户GUID,当前时间戳和另一个GUI(令牌GUID)连接在一起并使用共享密钥加密的安全令牌
  3. 收到请求后,服务器会查看声明的GUID,检索共享密钥,尝试解密并验证令牌。

    用户界面

    这些用户将发出登录请求,提供人工凭证(用户ID /密码)。经过身份验证后,将建立一个由cookie支持的会话,并根据此会话确保进一步的REST呼叫。

    问题

    编写一个保护两种方式的REST端点的最佳方法是什么:API访问和UI访问干净,没有太多重复?我正在寻找相同的以下内容,但也许更干净:

    @app.route('/')
    def hello():
        user = None
        if session:
            user = get_authenticated_user()
        else:
            user = process_auth_headers()
        # Do something with user
    

    我希望在Flask中对服务器进行编码,但我确信该解决方案可以轻松应用于任何基于REST的服务器端框架。

    期待社区的一些见解。

    感谢。

1 个答案:

答案 0 :(得分:0)

我们为服务器使用node,但我认为我们使用的方法很常见。有表达的会话库可以使用,并且它们可以很好地利用任何数据库来存储会话信息。他们使用带有密钥的cookie,当客户端进入时,该密钥会对数据库进行查找。会话数据在客户端进行身份验证时创建,并且带有客户端密钥的cookie将添加到浏览器中。客户端GUID存储在会话中,它永远不会离开服务器。我们在访问服务器时使用该信息来检查他们是否已登录,他们是谁以及他们可以做什么。我们使用了两个FB,(客户端检查FB,然后将FB id和令牌发送到服务器,然后重新检查并设置会话或拒绝它),或旧的经典,电子邮件和密码。当您必须跨多个应用服务器进行扩展时,这很有效,因为会话独立于服务器,它适用于移动客户端和Web。