java - 使用 Spring Security 进行两级身份验证

标签 java spring spring-security authorization spring-social

背景

我们的网站允许某人使用他们注册的电子邮件和密码登录。现在我们希望允许用户仅使用他们的 Facebook 身份进行注册(作为替代身份验证方法)。我们计划使用 Spring Social + Spring Security 3.1 来做到这一点

问题

网站中有一个部分要求您提供密码,无论您使用何种身份验证提供商。电子邮件注册用户不受此影响,但 Facebook 用户(因为他们没有密码)。他们需要以懒惰的方式生成密码(Facebook 用户第一次点击链接时),因为一小部分用户会使用此功能(而且我们不希望所有 Facebook 用户在创建密码时都被打扰)注册)。

那么,您将如何建模?

例如:我们知道可以定义一个名为“REGISTERED_WITH_PASSWORD”的安全角色,并使这些页面仅供该角色使用。是否有可能以一种方式设置 Spring,当登录的“无密码”Facebook 用户尝试进入该页面时,将他重定向到密码创建页面,以便他们可以创建并重试? (而不是将其作为授权异常处理)。

还有其他想法吗?任何优雅的设计都将受到欢迎,无论它是否依赖于 Spring Sec 3.1 的特定内容。

谢谢,

最佳答案

天真的实现想法,也许存在更好的方法:

  • 编写自定义过滤器并将其添加到springSecurityFilterChain
  • 只对您想要的 URL 启用过滤器(例如,手动检查 url)
  • 检查用户身份验证类型和“登录/密码已通过”标志,并将没有标志的 facebook 用户重定向到登录/密码页面
  • 将“登录名/密码已通过”标志保存到 session

SecurityContext 保持不变,因此这种方法对 spring 来说似乎是非侵入性的。

编辑:格式化

关于java - 使用 Spring Security 进行两级身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10012858/

相关文章:

java - org/codehaus/plexus/archiver/jar/JarArchiver(不支持的 major.minor 版本 49.0)- Maven 构建错误

java - ListView 以编程方式添加列

java - jpql,获取具有可为空变量的行

Grails Spring 安全插件 : logout not working

spring - Dart MIME类型在 Spring 之前更改为vnd.dart

java - Google map 查询返回的 JSON 包含像\x26 这样的编码字符(如何解码?)

java - Spring WebFlow 中的动态转换

java - 如何在 I18n 中使用 Spring?

spring - 具有Openid和数据库集成的Spring Security

java - Java中的二叉树不使用add方法