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

Java 在Oauth2令牌请求URL中隐藏密码,java,spring,rest,spring-security,oauth-2.0,Java,Spring,Rest,Spring Security,Oauth 2.0,我们正在使用java、jersey和spring安全性构建一个RESTful web应用程序。 设置了用于保护对REST资源访问的OAuth2提供程序服务 要请求有效的刷新令牌,必须提供以下查询参数: 用户名 密码 客户识别码 grant_类型 用户名/密码由前端的登录对话框提供: 但当我检查应用程序的网络流量时,我看到以下URL经过,其中密码以明文显示: 在将密码发送到OAuth2提供程序时,是否有一种简单的方法在请求URL中隐藏密码? 通过spring安全配置可以实现这一点吗 这是授

我们正在使用java、jersey和spring安全性构建一个RESTful web应用程序。 设置了用于保护对REST资源访问的OAuth2提供程序服务

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

  • 用户名
  • 密码
  • 客户识别码
  • grant_类型
用户名/密码由前端的登录对话框提供:

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

在将密码发送到OAuth2提供程序时,是否有一种简单的方法在请求URL中隐藏密码? 通过spring安全配置可以实现这一点吗

这是授权服务器的spring安全配置:

<!-- 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>

首先,您需要使用HTTPS端点。安全版本在发送任何数据之前执行握手。一旦建立了安全连接,所有查询参数都将加密。希望这是有意义的

文档位于。第3.3.2节添加HTTP/HTTPS通道安全性将帮助您实现这一点


这也很有帮助

@KhushalDave感谢您的回复

我使用以下教程在本地Tomcat应用服务器的8443端口上创建了一个自签名密钥库并启用了SSL身份验证:

接下来,我使用requires channel=“https”属性保护对/oauth/token url的每次调用,该url在我的spring-security.xml中指示需要https通道:

    <sec:intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_FULLY" requires-channel="https" />

现在,当我在本地服务器上调用my/oauth/tokenurl时,调用是使用SSL保护的

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

我想这没那么糟糕,因为它只是记录在浏览器地址栏中键入的数据。。。我想,只要查询参数在网络级别受到保护,就可以了


也许我应该使用类似或的程序来验证密码是否在网络级别受到保护。

检查@javadev这不是我要找的。我想在OAuth2URL中隐藏密码,而不是在spring配置中隐藏密码…感谢您的回复。目标是使我们的端点成为HTTPS端点。很高兴知道安全连接将加密所有查询参数。这将解决我的问题。我还在想:有没有办法在标题中传递用户名/密码,而不是作为查询参数?@MathiasGhys,一旦与服务器建立了安全连接,就可以使用基本身份验证(BA)。在BA中,数据是Base64编码的,但所有内容都将再次加密。所以这会解决你的问题。我知道这和你的问题有些出入。如果我错了,请纠正我,但OAuth 2规范允许将此类凭据作为表单参数发送。至少这是
FOSOAuthServerBundle
(PHP)概述中使用的实现。这将从URL和可能的日志文件中隐藏此信息。很抱歉,我有一段时间没有看到此信息。您完全正确。URL将被加密,参数将不可见。