【问题标题】:Hide password in Oauth2 token request URL在 Oauth2 令牌请求 URL 中隐藏密码
【发布时间】:2015-02-20 16:53:39
【问题描述】:

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

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

  • 用户名
  • 密码
  • client_id
  • grant_type

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

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

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

这是我的授权服务器的 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>

【问题讨论】:

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


【解决方案1】:

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

Security Namespace Configuration 的文档。 3.3.2 添加 HTTP/HTTPS 通道安全性部分将帮助您实现这一点。

这也很有帮助Here

【讨论】:

  • 感谢您的回复。目标是使我们的端点成为 HTTPS 端点。很高兴知道安全连接将加密所有查询参数。这将解决我的问题。我也在想:有没有办法在标题中传递用户名/密码,而不是作为查询参数?
  • @MathiasGhys,一旦您与服务器建立安全连接,您就可以使用基本身份验证 (BA)。在 BA 中,数据是 Base 64 编码的,但所有内容都将再次加密。所以这会解决你的问题。
【解决方案2】:

@KhushalDave 感谢您的回复。

我使用以下教程在本地 Tomcat 应用服务器的端口 8443 上创建了一个自签名密钥库并启用了 SSL 身份验证:Tomcat SSL configurationhttp://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html

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

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

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

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

我想这还不错,因为它只是记录在浏览器地址栏中输入的数据...只要查询参数在网络级别受到保护,我想就可以了。

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

【讨论】:

  • 我知道这与您的问题所述略有不同。纠正我如果我错了,但 OAuth 2 规范允许将此类凭据作为表单参数发送。至少这就是FOSOAuthServerBundle (PHP) 概述中使用的实现。这将从 URL 和潜在的日志文件中隐藏此信息。
  • 对不起,我有一段时间没有看到这个你是绝对正确的。 URL 将被加密,参数将不可见。
猜你喜欢
  • 2017-08-03
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 2019-09-13
  • 2018-08-13
  • 2012-06-08
相关资源
最近更新 更多