使用基于令牌的API登录?

时间:2014-07-02 05:37:13

标签: django api authentication django-rest-framework http-token-authentication

我正在使用api构建一个Django Web应用程序,该应用程序使用基于令牌的身份验证,而不是基于会话的身份验证。 api既可以通过Web应用程序的前端消耗,也可以通过单独的移动应用程序消耗。我很难搞清楚如何登录。我的第一个想法就是做我打算在移动应用程序中做的事情:登录表单只是POST到创建并发送回访问令牌的端点,然后访问令牌保存在浏览器/应用程序存储中发送以及未来的请求。这似乎在移动应用程序的上下文中是有意义的,但使用浏览器似乎有点奇怪。这种方法的一个问题是即使在注销后内部页面仍然可见。用户可以注销,然后点击后退按钮,只需浏览网站即可。即使所有的api调用都会失败,它们的静态内容仍然会被提供。

在我看来,不同之处在于,在移动应用中,只需要api调用进行身份验证,因为静态内容已经在设备上,不需要获取。但是,在Web应用程序中,需要提供静态内容,如果用户未登录,则可能不应该这样做。

仅使用基于令牌的身份验证是不常见的吗?我是否需要对静态内容使用基于会话的身份验证,以及对api使用基于令牌的身份验证?

这通常是怎么做的?

编辑:我正在使用django-rest-framework,因此使用它的一种简单方法也可以用。

1 个答案:

答案 0 :(得分:1)

连接您的JS API调用,以便身份验证失败会将当前页面重定向回登录页面。

$http({url: "/api/v1/thing"})
    .success(function(data, status, headers, config) {
        // Do something
    })
    .failure(function(data, status, headers, config) {
        if (status == 403) {
             window.location.href = "/login/?next="+window.location.href
        }
    })