当前位置: 首页 > 知识库问答 >
问题:

滴送 - 如何实现自定义授权方案?

能钟展
2023-03-14

我试图将Dropwizard用作一个完整的网络服务器,通过REST应用编程接口将服务的公共页面、受保护的页面和数据结合起来。因此,我正在通过应用基于计算令牌和领域的自定义授权方案来管理不同的安全区域来验证保护某些路由的能力。

我很难理解如何达到目的。我期望的顺序如下:

  • 显示带有用户表单的 HTML 登录页
  • 用户输入其凭据
  • 调用身份验证路由以验证凭据并为用户创建令牌。发回一个带有授权标头的欢迎页面,例如:MyScheme 令牌=“TYGDF655HD88D098D0970CUCHD987D897”,领域=“超级机密的东西”
  • 用户单击链接以列出其发票: /html/发票
  • 这条路线受滴水精灵@Auth注释保护
  • 浏览器没有发送任何标头,因此服务器使用带有标头的401响应进行应答:WWW-身份验证MyScheme领域=“超级机密的东西”,挑战浏览器为其提供与质询匹配的授权标头

不幸的是,浏览器没有向它发送这个标头。根据许多文章,我认为浏览器管理了所有收到的凭据、它们的方案和参数(例如领域)的授权缓存。

浏览器似乎对众所周知的方案(如基本身份验证)具有此行为,但对于自定义方案却没有(顺便说一句,这通常是基本身份验证的问题,因为浏览器无法“注销”用户,因为他不会删除Web历史记录或关闭浏览器)。

您认为如何告知浏览器缓存授权凭证,并在每次服务器请求使用正确的方案/领域挑战时添加它们?

我可以在这里显示我用来运行这个示例的所有示例代码。

参考资料(很好阅读): RFC1945在https://www.rfc-editor.org/rfc/rfc1945#section-11

谢谢你的帮助。

在Jdk Oracle 1.8/Debian 8上运行dropWizard 0.9.2。

共有1个答案

江雅懿
2023-03-14

浏览器不管理授权。它永远不会,或者至少永远不会。

服务器应始终保留其缓存,并验证来自浏览器的输入。

在基本级别上,您需要的所有字段都是HTTP标头的一部分。如果您注入请求,您将可以访问它们。

如果dropwizard没有您需要的东西,您可以始终忽略所有内容,只需读取请求标头并执行您需要的自定义处理。

例如,添加一个设置领域的过滤器,类似于WWW-Authenticate: Basic领域="mydomain:"

授权:MyScheme-ceaar密码。您需要自己解析和处理它,可能需要对所有请求或选择性请求设置传入过滤器。

这是个好主意吗?我让你来判断。也许,在你的用例中,这是有意义的。

如果您看一下源代码以及如何使用 BasicCredentials,也许,它可以提供您可能自己调整的潜在解决方案的见解。

希望有帮助。

 类似资料:
  • 功能说明 目睹直播提供了一系列的授权观看方式,如密码验证,付费观看等,然而由于客户业务的多样性,实现如:接入客户自身账户体系,登陆OA系统后再跳转到目睹观看直播等一系列更高级的授权观看方式,此时就需要使用自定义授权。 自定义授权逻辑图 功能设置 首先,需在 某个频道 - 频道管理 - 授权观看 - 授权类型 中点击自定义授权,并输入您希望在观众进入观看页时跳转的链接,如: http://your-

  • 我在这里遵循 JWT 夸克指南。我想在不允许用户组访问 API 时发送自定义响应。 这是指南中显示的示例。 我如何知道请求是否未经授权,以便我可以发送自定义响应。

  • 技术栈在前端是reactJS,后端由APIGateway和Lambda供电。我正在使用Auth0作为我的react应用程序中的身份服务。通过Auth0提供的一个社交登录进行身份验证时,我会返回、和。此外,我可以使用获取用户信息,例如。现在,我需要保护/阻止对我的后端即APIGateway和lambda的访问。 有很多选项来保护对AWS APIGateway的访问,如IAM授权器、自定义授权器。有一

  • 在我的一个Rest API调用中,我需要添加标题“Authorization:partner_id:timestamp signature” 如果公司名称是静态字符串,则可以对其进行硬编码,其中作为合作伙伴的id是查询参数的一部分,用户输入它,签名计算为sha256(机密,密码)。消化编码('base64') 我现在看到只有api_密钥,而且在swagger ui中允许基本授权,我如何以及在哪里实

  • null 我尝试将@priority(interceptor.priority.platform_beform)和@prematching也放入我的过滤器中,但即使是在OIDC启动后也会调用。 另外,是否有任何方法支持扩展quarkus oidc逻辑以包括自定义代码? 我无法获得oidc和keycloak-auth拦截器的优先级(知道这些可以帮助我决定过滤器的优先级)。请帮忙。

  • 我需要实现我的自定义DefaultComboxModel。这样做的原因是每次我打电话给 或者 或者 我看到它自动触发一个项目状态更改事件。这会导致一些随机项目自动从列表中选择。这不是我想要的,因为它用随机选择的项目填充可编辑的JTextField。 这是我在使用我的自定义Itemlistener中的Thread.dumpStack()进行调试时看到的stacktrace,它是我在调用上述方法时看到