所以我正在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中是否还有其他设施可以阻止这种情况发生?
答案 0 :(得分:2)
您必须使用HTTPS(TLS),请参阅The OAuth 2.0 Authorization Framework
令牌端点
[...]
由于对令牌端点的请求导致传输 明文凭证(在HTTP请求和响应中), 授权服务器务必要求使用TLS,如 向令牌端点发送请求时,第1.6节。
如果您的授权服务器实现允许不安全的通信,则它不符合OAuth2规范。