【发布时间】:2019-03-25 22:29:20
【问题描述】:
所以我在 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 中使用客户端对称加密算法来加密密码。由于所有客户端都将获得相同的加密算法,因此沿途的路由器可以对称地解码我的密码。这还不够好。
如果我必须将凭据作为纯文本传递,那么 Spring Security 有什么用? 我在这里做错什么了吗?大公司没有办法使用它。 Spring Security 中是否有任何额外的工具可以让我们防止这种情况发生?
【问题讨论】:
-
客户端、资源服务器和授权服务器之间的所有通信都应该使用 SSL 证书进行加密,这不是 Spring Security 管理的。 Spring Security 工作在应用层而不是 HTTP 传输层。
-
@chirdeep ,感谢您的关注。但是 Spring security Oauth2 使用 HTTP 而不是 HTTPS 工作,因此在考虑这种实现时造成了障碍。
-
@SamwellTarly:要使 Spring Security OAuth2 授权服务器安全,您必须更改服务器配置。例如在 Spring Boot 中嵌入 Tomcat 的配置。
标签: spring-boot spring-security oauth-2.0 spring-security-oauth2