我有一个具有基本身份验证(基于aps.net身份)的asp.net webapi(网络框架)项目,该项目通过使用过滤器来完成,如此处所述:https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/authentication-filters,因此对api方法的可访问性是由IdentityBasicAuthentication和Author过滤器控制。
我想实现两要素认证。
这就是我要做的事情
- 如果用户名/密码对,则前端在标头中发送“基本身份验证”
是正确的,用户启用了2fa,然后我发回质询:
“ 2fa-token”(包括临时2fa-token),否则只需将其发回
响应,没有挑战,只要200。
- 在内部,我向用户短信/电子邮件发送验证码。
- 如果前端收到“ 2fa-token”挑战,则用户会看到带有代码输入的弹出窗口。
- 前端应
执行像TwoFactorCodeCheck(string 2faCode,string
2faToken UserCredentials uc)
- 如果一切正确,我会发回2fa
永久令牌,可以存储在Cookie中,并将用于
每个随之而来的webapi请求。否则我会发回挑战
“ WWW-Authenticate”,用户将需要完成该过程
再次。
- 添加可以从中读取永久2fa令牌的过滤器
标头并验证用户身份以执行webapi方法。如果要求
使用2f永久令牌完成,但是它已经比我过期了
再次发送“ WWW-Authenticate”和401。
听起来不错吗?
存储和管理正在发送到用户的短信/电子邮件的代码的最佳方法是什么。也许令牌应该包含到期信息或/和其他一些元数据,而无需存储任何内容。
此外,我是否需要对标识特定浏览器/用户会话的信息进行某种方式的操作,以便不能从其他计算机/浏览器使用相同的令牌。
由于某些原因,我找不到人们将普通的基本auth + 2fa混合使用的示例。
谢谢。