我们正在使用java,jersey和spring-security构建RESTful Web应用程序。 设置了用于保护对REST资源的访问的OAuth2提供程序服务。
要请求有效的刷新令牌令牌,必须提供以下查询参数:
用户名/密码由前端的登录对话框提供:
但是当我检查应用程序的网络流量时,我看到跟踪路过的URL,其中密码以明文显示:
在将请求URL发送到OAuth2提供程序时,是否有一种简单的方法可以隐藏密码? 是否可以通过弹簧安全配置实现这一目标?
这是授权服务器的spring-security配置:
<!-- Token management -->
<oauth:authorization-server client-details-service-ref="clientDetails" token-services-ref="tokenServices" user-approval-handler-ref="userApprovalHandler" token-endpoint-url="/oauth/token">
<oauth:authorization-code/>
<oauth:implicit/>
<oauth:refresh-token/>
<oauth:client-credentials/>
<oauth:password/>
</oauth:authorization-server>
答案 0 :(得分:2)
首先,您需要使用HTTPS端点。安全版本在发送任何数据之前执行握手。一旦建立了安全连接,所有查询参数都将被加密。希望有意义。
Security Namespace Configuration处的文件。 3.3.2添加HTTP / HTTPS通道安全部分将帮助您实现此目的。
这也很有用Here
答案 1 :(得分:0)
@KhushalDave感谢您的回复。
我使用以下教程创建了一个自签名密钥库并在我的本地Tomcat应用程序服务器上的端口8443上启用了SSL身份验证:Tomcat SSL configuration http://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html
接下来,我保护对/ oauth / token网址的每次调用,在我的spring-security.xml中指示使用 requires-channel =“https”属性需要https频道:
<sec:intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_FULLY" requires-channel="https" />
现在,当我在本地服务器上调用my / oauth / token url时,使用SSL保护呼叫。
当我在浏览器中检查网络流量时(谷歌浏览器),我仍然可以看到密码。
我想这并不是那么糟糕,因为它只是记录在浏览器地址栏中输入的数据......只要查询参数在网络级别受到保护,我猜是好的。