POST请求中的Oauth2纯文本凭据?

时间:2018-10-21 20:00:03

标签: spring-boot spring-security oauth-2.0 spring-security-oauth2

所以我正在Spring Boot 2中使用OAuth2尝试Spring Security。

我基于此站点作为参考:
https://dzone.com/articles/secure-spring-rest-with-spring-security-and-oauth2

一旦建立了授权服务器,就可以使用http://localhost:8080/oauth/token端点通过传递POST请求从其获取令牌。

让我感到胆怯的是,POST请求必须使用纯文本格式的用户名和密码

POST /oauth/token HTTP/1.1
Host: localhost:8080
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="grant_type"

password
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="username"

admin
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="password"

password
------WebKitFormBoundary7MA4YWxkTrZu0gW--

这不是很大的安全威胁吗? 从客户端到服务器的过程中,每个路由器是否都能看到POST正文的内容?

现在要解决此问题,假设我在javascript中使用了客户端对称加密算法来加密密码。由于所有客户端都将获得相同的加密算法,因此沿途的路由器可以对称地解码我的密码。这还不够好。

如果我必须将credentails作为纯文本传递,那么Spring Security的用途是什么? 我在这里做错什么吗?大公司没有办法使用它。 Spring Security中是否还有其他设施可以阻止这种情况发生?

1 个答案:

答案 0 :(得分:2)

您必须使用HTTPS(TLS),请参阅The OAuth 2.0 Authorization Framework

  

令牌端点

     

[...]
   由于对令牌端点的请求导致传输      明文凭证(在HTTP请求和响应中),      授权服务器务必要求使用TLS,如      向令牌端点发送请求时,第1.6节。

如果您的授权服务器实现允许不安全的通信,则它不符合OAuth2规范。