REST服务自定义身份验证令牌

时间:2014-12-25 05:57:51

标签: web-services rest authentication token asp.net-web-api

我想为我的网络API创建自定义身份验证机制(没有第三方库,如owin,oauth等。)。

我该如何开发它?我检查了一些关于Web API身份验证方案的帖子,但我也很困惑。

根据我的情况;用户对web服务的请求,首先是服务检查令牌和UDID详细信息,如果没有这些bot值,则用户强制认证,如果用户认证服务返回此UDID的令牌。

正如您在上面的场景中所看到的,开发基于令牌的休息服务的最佳实践和真实方法是什么。

1 个答案:

答案 0 :(得分:1)

实际上,您可以根据要支持的内容和安全级别考虑几种方法。请记住,REST是无状态的,您不应该在服务器端保持身份验证状态。这意味着您应该为每个调用提供身份验证提示并验证发出请求的用户。

以下是可能的方法:

  • HTTP提供基本身份验证。您可以在HTTP标头Authorization中提供使用Base 64编码的用户名/密码。在执行请求之前,服务器应用程序获取授权提示并使用后端的提示检查它们(即事情是否匹配)

  • 实际上基本身份验证基本上不出所料;-)我的意思是密码/密钥总是在请求中发送。密码/密钥很容易读取,因为标头Authorization的内容是用Base64编码的,并且秘密令牌始终有效。没有内置的验证和过期支持。更进一步,您可以使用临时令牌。为此,您的RESTful应用程序需要提供两个额外的资源:

    • 第一个允许根据身份验证提示(用户名,密码)获取临时令牌。此令牌具有到期日期,将在执行实际请求时使用。此资源通常还会返回刷新令牌以在过期时获取新令牌。这可以防止再次发送用户名/密码(它们仅在第一次发送时)。
    • 当前一个基于刷新令牌到期时,第二个获得一个新的临时令牌。
  • 最后一级包括在实际执行请求时向第二种方法添加请求签名。这将在执行请求时在客户端完成。

对于最后两个,OAuth2可以是解决方案,因为它提供了设计/实现此类方法的标准。您可以注意到,您不必使用第三方库来执行此操作。

我最近写了一篇博客文章,详细描述了这些方法。请参阅此链接http://templth.wordpress.com/2015/01/05/implementing-authentication-with-tokens-for-restful-applications/

希望有所帮助。 亨利