REST api身份验证机制

时间:2013-09-23 18:09:35

标签: web-services security rest restful-authentication

我正在使用自定义协议来保护我的REST API - 将一堆独特数据混合在一起(包括用户的令牌)并将其作为授权标头发送(非常类似于AWS rest api)。

目前,我正在让用户发送它的un \ pw以获取所有未来通话的令牌:

POST http://xxxx/token
Body: {"username" : "Bob", "password":"foo"}

我的问题是我应该如何保护产生用户令牌的初始登录呼叫?目前的情况是否足够好?

2 个答案:

答案 0 :(得分:0)

您的解决方案看起来像是在POST的正文中调用了具有用户名和密码的j_security_servlet。 您可以在此处找到有关servlet的更多信息: http://docs.oracle.com/javaee/1.4/tutorial/doc/Security5.html

您可能希望选择TLS安全连接来加密您发送的用户名/密码。 但您可能需要考虑将HTTP基本身份验证与TLS或其他一些经过验证的技术结合使用,而不是设计自己的技术。

顺便说一下。我的答案是使用SSL / TLS。

答案 1 :(得分:0)

您也可以使用OAuth2,因为这基本上就是您正在实施的内容。请参阅“4.3。资源所有者密码凭据授予”:http://tools.ietf.org/html/rfc6749#section-4.3

在OAuth2中,请求就像这样(来自RFC的示例):

 POST /token HTTP/1.1
 Host: server.example.com
 Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
 Content-Type: application/x-www-form-urlencoded

 grant_type=password&username=johndoe&password=A3ddj3w

“授权”标题用于授权客户端应用程序,正文中的用户名/密码是您的用户凭据。

以下是相应的回复:

 HTTP/1.1 200 OK
 Content-Type: application/json;charset=UTF-8
 Cache-Control: no-store
 Pragma: no-cache

 {
   "access_token":"2YotnFZFEjr1zCsicMWpAA",
   "token_type":"example",
   "expires_in":3600,
   "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
   "example_parameter":"example_value"
 }

OAuth2需要TLS / SSL才能获得安全性(例如brazo也会回答)。