如何在 RESTful Web 服务中实现登录?

2024-03-28

我正在构建一个带有服务层的 Web 应用程序。服务层将使用 RESTful 设计构建。我们的想法是,在未来的某个时候,我们可能会构建使用与 Web 应用程序相同的服务层的其他应用程序(iPhone、Android 等)。我的问题是 - 如何实现登录?我认为我在从更传统的基于动词的设计转向基于资源的设计时遇到了困难。如果我用 SOAP 构建它,我可能会有一个名为 Login 的方法。在 REST 中我应该有一个资源。我很难理解应该如何构建用于登录的 URI。应该是这样的吗:

http://我的服务/ http://myservice/{用户名}?p={密码}

编辑:前端 Web 应用程序使用传统的 ASP.NET 框架进行身份验证。然而,在身份验证过程中的某个时刻,我需要验证提供的凭据。在传统的 Web 应用程序中,我会进行数据库查找。但在这种情况下,我正在调用服务而不是进行数据库查找。因此,我需要服务中的某些内容来验证所提供的凭据。除了验证提供的凭据之外,我可能还需要用户成功通过身份验证后的某种信息 - 例如他们的全名、ID 等。我希望这能让问题更清楚。

或者我没有以正确的方式思考这个问题?我觉得我很难正确描述我的问题。

Corey


正如 S.Lott 已经指出的那样,我们这里有两个折叠的东西:登录和身份验证

身份验证超出了本文的范围,因为这已被广泛讨论并且达成了共识。然而,要让客户端针对 RESTful Web 服务成功验证自身身份,我们实际上需要什么?是的,某种令牌,我们称之为访问令牌。

客户端)所以,我需要的只是一个访问令牌,但是如何以 REST方式获得这样的令牌呢?
服务器)为什么不简单地创建它呢?
客户)怎么来的?
服务器)对我来说,访问令牌只不过是一种资源。因此,我将为您创建一个,以换取您的用户名和密码。

因此,服务器可以提供资源 URL“/accesstokens”,用于 POST 用户名和密码,返回新创建的资源“/accesstokens/{accesstoken}”的链接。 或者,您返回一个包含访问令牌和带有资源链接的 href 的文档:



<access-token
  id="{access token id goes here; e.g. GUID}"
  href="/accesstokens/{id}"
/>
  

最有可能的是,您实际上并未将访问令牌创建为子资源,因此不会在响应中包含其 href。
但是,如果您这样做,客户端是否可以代表其生成链接?不!
请记住,真正的 RESTful Web 服务以客户端可以自行导航的方式将资源链接在一起,而无需生成任何资源链接。

您可能遇到的最后一个问题是,您是否应该将用户名和密码发布为 HTML 表单或文档,例如XML 或 JSON - 这取决于......:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 RESTful Web 服务中实现登录? 的相关文章

随机推荐

  • Windows 客户端(而非 Web 应用程序)打印的最佳方式?

    从 c net 打印内容的最佳方法是什么 问题涉及单页以及包含大量页面的报告 如果能获得最常见的打印库的列表 其中包含每个库的主要功能和陷阱 那就太好了 更新 适用于标准 Windows 客户端 或服务器 不适用于网络应用程序 对于报告 我
  • 从数组和频率创建哈希

    我有一个数组 1 2 4 5 4 7 我想找到每个数字的频率并将其存储在哈希中 我有这段代码 但它返回NoMethodError undefined method for nil NilClass def score array hash
  • Python默认参数评估[重复]

    这个问题在这里已经有答案了 我正在阅读 Python 文档版本 2 7 10 中的 python 教程 我遇到了类似的内容 Code def fun1 a L L append a return L print fun1 1 print f
  • java.lang.IllegalArgumentException:未找到命名查询:

    我得到以下代码 Stateless public class BondecomandeDAO PersistenceContext private EntityManager em public Bondecommande findBCby
  • 检测 iframe 对象中的 src/位置更改

    我有一个 iframe 对象指向特定页面 例如 我希望每当 iframe 的位置发生变化时都会收到警报 因为用户单击了其中的链接 Doing onLoad alert this ContentWindow location href 什么也
  • 在 C++ 中是否有模仿 Java try/finally 的常用习惯用法?

    从事 Java 工作很多年了 所以一直没有关注 C 有finally子句是否已添加到语言定义中的 C 异常处理中 有没有一种流行的模仿 Java 的 try finally 的习惯用法 我还担心 C 没有一个终极超类型来处理所有可能抛出的异
  • .NET Micro Framework 不安全代码

    NET Micro Framework 是否支持不安全代码 换句话说 我可以在 NET Micro Framework 的代码中使用指针吗 来自维基百科页面 http en wikipedia org wiki NET Micro Fram
  • 使用 ARC 手动保留

    在 ARC 之前 我有以下代码 可以在异步操作正在进行时保留委托 void startAsyncWork delegate retain calls executeAsyncWork asynchronously void executeA
  • 如何获得带有括号和所有内容的 SQL Server 列定义?

    我需要一种智能方法 以可在 CREATE TABLE 语句中使用的方式从 INFORMATION SCHEMA COLUMNS 中获取数据类型 问题是需要理解的 额外 字段 例如 NUMERIC 精度和数字 SCALE 显然 我可以忽略 I
  • 在 HIVE 中选择该月的第一天

    我正在使用 Hive 它与 SQL 类似 但对于 SQL 用户来说语法可能略有不同 我看过其他的stackoverflow 但它们似乎在SQL中具有不同的语法 我试图通过此查询获取该月的第一天 这给了我今天的一天 例如 如果今天是 2015
  • Android:尝试序列化...忘记注册类型适配器?”

    如何使用 HashMap 转换为 JSONGson https code google com p google gson class ClassData public String jsonString public Class clas
  • 将输出分配给 Bash 中的变量[重复]

    这个问题在这里已经有答案了 我试图将 cURL 的输出分配给一个变量 如下所示 bin sh IP curl automation whatismyip com n09230945 asp echo IP sed s IP IP nsupd
  • MSSQL - JPA - 特殊字符的字符编码 - 附加“N”nativeQuery

    我使用 Spring 4 3 1 和 JPA 2 0 并连接到 MSSQL 我正在使用 JpaRepository 的 save 方法来插入和更新数据 其中一个字段具有 nvarchar 它可以包含特殊字符 如拉丁文 中文 另外 我在 ap
  • 如何使用反射来调用私有方法?

    我的类中有一组私有方法 我需要根据输入值动态调用一个方法 调用代码和目标方法都在同一个实例中 代码如下所示 MethodInfo dynMethod this GetType GetMethod Draw itemType dynMetho
  • TypeScript 字符串并集不可分配给函数中元组的并集

    这两个示例的行为应该是相同的 但第二个示例出现错误 为什么 Example 1 const a x y x const b x y a ok Example 2 function fn a x y const b x y a Type x
  • Powershell确定永久移动(重定向)资源的新URL

    我在 Linux 上使用 AppImage 来使用 Powershell Core v6 beta 5 有没有办法找出 301 重定向的 新 位置 Invoke WebRequest Method HEAD http SomethingTh
  • Rails 3:生成唯一代码(优惠券)

    生成用作优惠券代码的唯一代码的最佳方法是什么 Thanks Ruby 的标准库中有SecureRandom为了这 SecureRandom hex 3 输出的长度是输入指定长度的两倍
  • Rails 3 有更好的 validates_linked 方法吗?

    Rails 3 包括validates associated保存嵌套模型时会自动调用它 该方法的问题是消息很糟糕 模型无效 有一些帖子针对 Rails 2 攻击了这个问题 http rpheath com posts 412 a bette
  • assembly x86 qemu:致命:尝试在 RAM 或 ROM 之外执行代码

    我正在开发一个非常基本的 shell 其中当前唯一的命令是 help 如果您输入错误 系统会通知您该命令无法识别 在段和堆栈设置的某个地方 我有一个错误 导致 shell 在我输入任何内容后吐出一些废话 然后完全冻结 我在终端中遇到错误 q
  • 如何在 RESTful Web 服务中实现登录?

    我正在构建一个带有服务层的 Web 应用程序 服务层将使用 RESTful 设计构建 我们的想法是 在未来的某个时候 我们可能会构建使用与 Web 应用程序相同的服务层的其他应用程序 iPhone Android 等 我的问题是 如何实现登