在 Oauth2 令牌请求 URL 中隐藏密码
Posted
技术标签:
【中文标题】在 Oauth2 令牌请求 URL 中隐藏密码【英文标题】:Hide password in Oauth2 token request 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>
【问题讨论】:
查看***.com/questions/4196545/… @javadev 这不是我要找的。我想在 oauth2 url 中隐藏密码,而不是在 spring 配置中隐藏密码... 【参考方案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 保护的。
当我在浏览器(谷歌浏览器)中检查网络流量时,我仍然可以清楚地看到密码。
我想这还不错,因为它只是记录在浏览器地址栏中输入的数据...只要查询参数在网络级别受到保护,我想就可以了。
也许我应该使用Eavesdrop 或Wireshark 之类的程序来验证密码在网络级别是否受到保护。
【讨论】:
我知道这与您的问题所述略有不同。纠正我如果我错了,但 OAuth 2 规范允许将此类凭据作为表单参数发送。至少这就是FOSOAuthServerBundle
(php) 概述中使用的实现。这将从 URL 和潜在的日志文件中隐藏此信息。
对不起,我有一段时间没有看到这个你是绝对正确的。 URL 将被加密,参数将不可见。以上是关于在 Oauth2 令牌请求 URL 中隐藏密码的主要内容,如果未能解决你的问题,请参考以下文章