在Oauth2令牌请求URL中隐藏密码

时间:2014-12-22 15:05:26

标签: java spring rest spring-security oauth-2.0

我们正在使用java,jersey和spring-security构建RESTful Web应用程序。 设置了用于保护对REST资源的访问的OAuth2提供程序服务。

要请求有效的刷新令牌令牌,必须提供以下查询参数:

  • 用户名
  • 密码
  • 的client_id
  • grant_type

用户名/密码由前端的登录对话框提供:

login dialog

但是当我检查应用程序的网络流量时,我看到跟踪路过的URL,其中密码以明文显示:

password in clear

在将请求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>

2 个答案:

答案 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保护呼叫。

当我在浏览器中检查网络流量时(谷歌浏览器),我仍然可以看到密码。

Password in clear

我想这并不是那么糟糕,因为它只是记录在浏览器地址栏中输入的数据......只要查询参数在网络级别受到保护,我猜是好的。

也许我应该使用像EavesdropWireshark这样的程序来验证密码是否在网络级别受到保护。