使用Authorization: bearer [token]
的请求可以用于身份验证吗?
或者
我们是否应该使用另一种方法对客户端进行身份验证并颁发 token ,然后像OAuth2一样将 token 用作承载 token ?
为什么流行的Web服务(例如Github,AWS,Google等)使用其他方法(例如AWS这样做:Authorization: AWS4-HMAC-SHA256Credential=...
)来认证客户端。问题的重点是:在以下流程中是否存在任何有值(value)的 Assets 或违反标准的行为。
我想使用以下流程:the client
:类似于Twitter客户端。the server
:类似于Twitter API。
Authorization: bearer [token]
向服务器请求资源。 我阅读了以下RFC,但是我没有找到不应该或不应该使用上面的流程的任何原因。
https://tools.ietf.org/html/rfc7235
https://tools.ietf.org/html/rfc6750
谢谢
最佳答案
我建议坚持使用OAuth2规范。如果要使用用户名和密码来获取 token ,则应使用“客户端凭据”流程。这意味着您需要一个“https”端点,用户可以在其中通过以下POST请求获取访问 token :
POST /token HTTP/1.1
Authorization: Basic base64_encode("username:password")
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
如果客户端凭据有效,则端点应在服务器上创建访问 token 。在 token 旁边,您应该存储谁获得了 token 以及 token 过期时的时间戳。因此, token 不应像在您的示例中那样被加密的用户名和密码,而应是分配给用户的随机字符串。
然后,客户端可以使用访问 token 访问您API的 protected 部分。如果您的API收到了承载 token ,则可以在 token 表中查找分配的用户。
就是说,在OAuth2中,您通常会通过API提供商先前获得的应用 key 和 secret 获得访问 token 。这样做的好处是,用户不需要与第三方应用程序共享任何凭据。但是是否需要此取决于您的用例。
关于api - 使用承载 token 进行认证(≠授权),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42617000/