authentication - 密码保护 REST 服务?

标签 authentication rest

在创建了一个基本的 REST 服务之后,我已经到了适合添加某种密码保护的地步,因为我需要验证我的用户是否已正确登录并有足够的权限来执行他们所执行的任何操作即将。

REST 服务将主要从 Javascript 繁重的前端访问,考虑到这一点,我提出了以下两个替代方案来解决这个问题:

  • 通过首先将凭据发送到 /login 使用户登录带有 POST 的页面.该页面设置了一个 session cookie,其中用户是
    标记为已登录,以及权限级别。在每一个上
    根据请求,我验证用户已登录并且他/她
    权限级别。 session 到期时,自动或
    手动(注销,用户将不得不重新登录)。
  • 临时保存本地散列的凭据,并在用户发出的每个请求中发送用户凭据,以根据每个请求验证凭据和权限后端。

  • 有更多的方法可以解决这个问题吗?还有什么我应该关心的吗?

    最佳答案

    我目前正在开发一个 REST API 以及一个客户端(用 javascript 编写),下面我将尝试解释用于保护 API 免受未经授权访问的方法。

  • 使您的 REST API 需要 Auth-Key除了 /api/authenticate 之外,每个 API 请求的 header .
  • /api/authenticate将获取用户名和密码(使用 POST 发送),并与 Auth-Key 一起返回用户信息.
  • 这个Auth-Key在调用 /api/authenticate 后随机生成并存储在后端 users带有特定用户条目的表,md5远程ip的哈希+客户端提供的用户代理。
  • 在每个请求中,Auth-Key 的值,以及 md5提到的总和,在 users 中搜索.如果发现一个在过去一直处于事件状态的有效用户 N分钟用户将被授予访问权限,如果没有:http 返回代码 401。
  • 在 REST 客户端中,首先获取 Auth-Key通过张贴到 /api/authenticate ,然后将此值存储在一个变量中,并在以后的每个请求中发送。
  • 关于authentication - 密码保护 REST 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8562223/

    相关文章:

    java - 在 Servlet 3.0 HttpServletRequest#login() 身份验证后重定向到 protected 资源或原始/保存的请求?

    java - 使用 JBoss 和 Intellij 进行部署

    django - 良好的 Django 设计实践,可以在 DRY 之后添加 REST api

    c# - WCF Xml 序列化和自动实现的属性

    node.js - 使用 Node.js 进行 REST 调用以从 Azure Cosmos DB 检索单个文档时出现 "Invalid partition key"

    c# - 在 asp.net MVC4 应用程序中重新连接到 Servicestack session

    html - firefox 将密码填入用户名字段

    PHP 全局可见登录

    python - remote_api_shell.py 与本地主机 dev_appserver

    java - 如何向 "/users?<some-query-here>"发出 GET 请求,然后在 JSON 数组中返回所有满足查询条件的用户