【发布时间】:2016-05-07 17:35:02
【问题描述】:
我正在尝试将 Dropwizard 用作完整的 Web 服务器,通过 REST API 结合服务公共页面、受保护页面和数据。因此,我通过应用基于计算的令牌和领域的自定义授权方案来管理不同的安全区域来验证保护某些路由的能力。
我很难理解如何达到目的。我期待的顺序如下:
- 显示带有用户表单的 HTML 登录页面
- 用户输入其凭据
- 调用身份验证路由来验证凭据并为用户创建令牌。发回带有授权标头的欢迎页面,例如:MyScheme token="TYGDF655HD88D098D0970CUCHD987D897", realm="SUPER SECRET STUFF"
- 用户单击链接以列出其发票:/html/invoices
- 此路由受 DropWizard @Auth 注解保护
- 浏览器未发送任何标头,因此服务器以带有标头的 401 响应进行响应:WWW-Authenticate MyScheme realm="SUPER SECRET STUFF",要求浏览器为其提供与挑战匹配的授权标头
不幸的是,浏览器没有向它发送此标头。根据许多文章,我认为浏览器管理所有接收到的凭据、它们的方案和参数(例如领域)的授权缓存。
似乎浏览器对于基本身份验证等众所周知的方案具有这种行为,但对于自定义方案则没有(顺便说一下,这通常是基本身份验证的问题,因为浏览器无法“注销”用户,因为他没有擦除网络历史记录或关闭浏览器)。
您认为如何告诉浏览器缓存授权凭据并在每次服务器请求使用正确的方案/领域挑战它时添加它们?
我可以在这里显示我用来运行这个示例的所有示例代码。
参考(好读):RFC1945 https://www.rfc-editor.org/rfc/rfc1945#section-11
感谢您的帮助。
在 Jdk Oracle 1.8 / Debian 8 上运行 dropWizard 0.9.2。
【问题讨论】:
标签: rest authentication webserver authorization dropwizard