【问题标题】:Understanding Spring's Authentication-object and the context of its creation了解 Spring 的 Authentication-object 及其创建的上下文
【发布时间】:2019-01-22 01:38:44
【问题描述】:

我正在尝试掌握 Spring-Security,但目前在理解我找到的教程尚未解决的身份验证对象/接口方面遇到了一些麻烦。因此,我将感谢您对以下方面的澄清:

  1. 关于界面本身:

    1.1 创建自己的身份验证接口实现是否常见? 1.2 那是实施自定义形式的凭据的地方吗?

  2. 我见过很多实现自定义 AuthenticationProvider 的示例,但是:

    2.1。身份验证方法从哪里获取其身份验证参数? (我假设如果我在我的配置中指定开箱即用的表单登录,这就是起源,但如果我不这样做呢?) 2.2 是否可以提供我自己的 Authentication-Objects 源供自定义 AuthenticationProvider 使用?

也许我可以通过一个例子更好地解释最后两位。 假设我想通过用户名、密码和我给出第一句的一首诗的最后两个单词的信息等三组信息来提供身份验证。所以在这种情况下,我的凭据将从通常的用户/密码场景中扩展。此外,我可能希望将某种形式的后请求作为这些凭据的来源。

我希望这不是含糊的。如果我可以做些什么来完善我的问题,请告诉我,我会尝试。

【问题讨论】:

  • 这是一个非常重要的问题,很难给出公正的答案。我尽力解释了可能性,但如果我没有回答您的问题,请随时离开 cmets。集成测试和调试器成为你最好的朋友。

标签: java spring spring-security


【解决方案1】:
  1. 如果您满足接口指定的联系人,则可以定义自定义身份验证对象。尽管考虑到您的用例,扩展 UsernamePasswordAuthenticationToken 可能更符合您想要实现的目标。

  2. 1234563 /li>

可以提供您自己的身份验证对象来源。您可以通过设置过滤器来做到这一点。

您可以查看表单登录的默认弹簧过滤器UsernamePasswordAuthenticationFilter,因为这将接近您的用例。

【讨论】:

  • 感谢您的回答,这让我走上了正确的道路!我希望以下听起来不太愚蠢;首先:注册我的自定义 AuthenticationProvider,你的意思是在我的 Config 中,就像 5.1 中的这里,例如 baeldung.com/spring-security-multiple-auth-providers 或者你是否暗示提供我自己的 AuthenticationManager 实现会很好?第二:我查看了 UserPasswordAAuthenticationFilter 及其超类 AbstractAuthenticationProcessingFilter 的源代码(我担心我必须制作几个 cmets)。
  • 据我了解,我必须使用 UPAFilter 中的“.../login”这个过滤器指定我想要拦截请求的目的地,我要求这些通过 POST 完成(构造函数),对吗?我想我必须以某种方式注册这个过滤器才能生效而不是默认,所以我的第一个问题是:最佳实践是如何做到的:)?第二:据我所知,UPAFilter 从请求参数中提取信息; HttpServletRequest 的文档暗示我可以用类似的方式使用标题,对吗?
  • (刚刚看到他们在尝试身份验证中测试 POST,我的错)
  • 查看 spring-security 和 spring-security-oauth github 项目的测试在配置方面也提供了一些很好的资源。特别是 oauth 项目(虽然在性质上可能略有不同......但可能会让你朝着正确的方向前进。github.com/spring-projects/spring-security-oauth/tree/master/…
  • 到目前为止并没有帮助我走得更远,但我不想占用你更多的时间,所以我会接受你的回答,因为它让我比以前更进一步,我的问题毕竟非常广泛。我可能应该拆分从进展中得出的问题。所以,再次感谢您!
猜你喜欢
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 2013-09-21
相关资源
最近更新 更多