使用REST API的Guid令牌进行基本身份验证,而不是用户名/密码

概观

我正在开发一个使用PhoneGap和后端REST API的移动应用程序。 REST API不会被第三方开发人员使用,但是将会是特定于应用程序的,所以不需要实现oAuth。 因此,我计划在用户输入用户名/密码访问API资源的地方使用基本认证。 所有API通信都将使用SSL。

使用令牌的基本身份验证

我不想让应用程序存储用户名/密码,并在每次向API发送请求时发送它,我宁愿在第一次登录请求时验证用户名/密码,并发回一个GUID令牌。 客户端存储此GUID令牌,并通过Authorization头将每个请求发送回API,如下所示:

授权:基本e1d9753f-a508-46cc-a428-1787595d63e4

在服务器端,用户名/ GUID组合将被存储在服务器上,并具有到期日期以及设备设置。 这将允许跟踪用户登录的设备数量,以及在Guid达到期限后会话结束。

这种方法是否合理和安全?


一般的“使用令牌验证”方法非常好,但是您不应该试图以不同于预期的方式进行基本验证的工作(毕竟它是一个定义的标准)。 您应该使用自己的标头进行身份验证。 你可以在这里找到这样的场景的一个很好的描述:

  • 使您的ASP.NET Web API安全

  • 您根本无需创建自定义标头或身份验证方案。

    Bearer认证方案是专门为您的使用案例设计的:

    Authorization: Bearer e1d9753f-a508-46cc-a428-1787595d63e4
    

    Basic认证必须如下:

    Authorization: Basic base64EncodedUsernameAndPassword
    

    其中base64EncodedUsernameAndPassword等于以下输出:

    base_64_encode(username + ':' + raw_password)
    

    如果尾部文本值不是上述精确算法,请勿使用“ Basic

    如果您只是想在计划名称之后放置任何您想要的值,请使用Bearer方案 - 这就是它的发明原理。

    警告

    虽然您可以使用简单的GUID / UUID作为您的令牌,但这不是一个真正的安全令牌。 考虑改用JWT。 智威汤逊可以进行数字签名并分配一个TTL,以便只有服务器设置它才能a)创建并验证其真实性,b)确保它的使用时间不超过允许的时间。 虽然基于GUID存储的数据可能是真的,但JWT方法不需要服务器状态 - 因此它可以扩展得更好 - 并且完成同样的事情。

    链接地址: http://www.djcxy.com/p/22049.html

    上一篇: Basic Authentication with a Guid token for REST api instead of username/password

    下一篇: REST API Authorization & Authentication (web + mobile)