繁体   English   中英

REST api身份验证机制

[英]REST api authentication mechanism

我正在使用自定义协议保护我的REST API的安全-将一堆唯一的数据(包括用户的令牌)哈希在一起,并将其作为Authorization标头发送(非常类似于AWS rest api )。

目前,我正在向用户发送un \\ pw,以便为以后的所有通话获取令牌:

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

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

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

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

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

您最好使用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也可以回答)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM