我正在尝试将Dropwizard用作完整的Web服务器,通过REST API将服务公共页面,受保护页面和数据组合在一起。因此,我通过应用基于计算令牌和领域的自定义授权方案来管理不同的安全区域,从而验证保护某些路由的能力。
我很难理解如何达到目的。我期待的顺序如下:
- 显示带有用户表单的HTML登录页面
- 用户输入其凭证
- 调用验证路由以验证凭据并为用户创建令牌。发送一个带有授权标题的欢迎页面,如:MyScheme token =“TYGDF655HD88D098D0970CUCHD987D897”,realm =“SUPER SECRET STUFF”
- 用户单击链接列出其发票:/ html / invoices
- 此路由受DropWizard @Auth注释保护
- 浏览器没有发送任何标头,因此服务器回答带有标题的401响应:WWW-Authenticate MyScheme realm =“SUPER SECRET STUFF”,挑战浏览器为其提供与挑战相匹配的授权标题
不幸的是,浏览器没有发送此标题。根据许多文章,我认为浏览器管理授权缓存所有收到的凭证,他们的方案和参数(如领域)。
似乎浏览器对于众所周知的方案(如基本身份验证)具有此行为,但不适用于自定义方案(顺便说一句,它通常是基本身份验证的问题,因为浏览器无法“注销”用户,因为他没有擦除网络历史记录或关闭浏览器。)
您认为可以告诉浏览器缓存授权凭据并在每次服务器请求使用正确的方案/领域挑战它时添加它们吗?
我可以在这里显示我用来运行这个例子的所有示例代码。
参考(易于阅读):http://tools.ietf.org/html/rfc1945#section-11
处的RFC1945感谢您的帮助。
在Jdk Oracle 1.8 / Debian 8上运行dropWizard 0.9.2。
答案 0 :(得分:0)
浏览器无法管理授权。它从来没有,或者至少从来没有。
服务器应始终保留其缓存,并验证来自浏览器的输入。
在基本级别,您需要的所有字段都是HTTP标头的一部分。如果你注入了请求,你就可以访问它们了。
如果dropwizard没有你需要的东西,你可以随时忽略所有内容,只需阅读请求标题并进行所需的自定义处理。
例如,添加一个设置realm
的过滤器,类似于WWW-Authenticate: Basic realm="myrealm:"
Authorization: MyScheme Ceasar-cipher-password
。您需要自己解析并自行处理,或者在所有请求或选择性请求上设置传入过滤器。
这是个好主意,我会让你成为法官。也许,在你的用例中它是有道理的。
如果您查看源代码以及如何使用BasicCredentials,它可以提供您可能自行调整的潜在解决方案的洞察力。
希望它有所帮助。