Shiro,多因素身份验证

Posted

技术标签:

【中文标题】Shiro,多因素身份验证【英文标题】:Shiro, Multi Factor Authentication 【发布时间】:2013-08-31 09:28:14 【问题描述】:

有没有办法在 Shiro 中实现多因素身份验证?有人可以给我一个关于如何实现这个的提示吗?

更多详情: 基本思想是,用户需要像往常一样使用用户名和密码登录,但在实际验证之前,用户还需要输入他收到的一次性令牌作为 SMS。

谢谢!

【问题讨论】:

不知道?有人吗?我也很满意一个提示,我需要“插入”我自己的多因素身份验证实现,这样它就可以与 Shiro 一起工作! 【参考方案1】:

我终于自己解决了我的问题,但我当然总是愿意接受其他建议。

我实现了自己的 2 - 因素身份验证流程:

首先我更改了登录页面的 URL,Shiro 将未经身份验证的用户重定向到我自己的登录页面,这导致了身份验证机制。 用户需要完成两个“阶段”才能登录。

在第一阶段,他/她必须提供用户名和密码,如果 这些都是有效的,用户被重定向到登录的第二阶段。 同时,已生成一次性令牌并发送给用户 通过短信。用户的认证进度也保存在 会议(这意味着我记得,第一阶段已经完成 成功)。 在第 2 阶段,用户需要输入令牌。如果 令牌是 无效或超过尝试次数 (5) 已过期(5 分钟后)尝试次数 正确输入令牌超过 4 用户将被重定向 到第 1 阶段,所有进度将被删除。我 如果一切顺利,用户将通过 Shiro 身份验证 (当然不会让他/她知道)

最终用户将被重定向到他/她最初请求的页面,这仍然允许他/她为页面添加书签。当然,Shiro 的记住我将永远被禁用。

【讨论】:

是否有任何代码可以实现这种行为? @PauloPires 对不起,我真的没有免费可用的代码,我在实习期间实现了这个。但是程序本身的实现并不难,你只需要弄清楚如何使它与 Shiro 一起工作。完成认证后,只需调用 shiro 中的相应函数即可。 @Sonja 感谢您分享您的方法!这可能会对我有所帮助。那么你在第一阶段使用 Shiro 验证用户名和密码吗?从 Les Hazlewood 的这篇文章中,他说“这(多阶段身份验证)已经在基于 Shiro 的应用程序中完成,但是通过应用程序预先收集所有必需的信息,然后与 Shiro 交互。”似乎最好按照自己的方式进行,在进行第二阶段之前验证用户名/密码。顺便说一句,我很好奇,您是如何使用 SMS 的? @mikato 感谢您的反馈,希望我的回答对您有所帮助!有一些信誉良好的提供商为从应用程序发送的 SMS 提供合同。他们通常还提供一个 API 来与他们的服务器通信。我使用了 websms.at,这是一项奥地利服务,所以我不确定这是否会对您有所帮助。

以上是关于Shiro,多因素身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Vulnerabilities in multi-factor authentication:多因素身份验证漏洞

在自定义函数中使用 AWS cognito 多因素身份验证

使用 Paramiko 进行多因素身份验证(密码和密钥)

使用 Spring Boot 2 和 Spring Security 5 进行多因素身份验证

Shiro 学习笔记——shiro身份验证

Shiro学习身份验证