首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ASP.NET成员资格向.NET web应用添加2FA

使用ASP.NET成员资格向.NET web应用添加2FA
EN

Stack Overflow用户
提问于 2018-07-25 12:24:42
回答 2查看 1.2K关注 0票数 1

谁能给我推荐一些使用旧的.NET会员系统实现双因素身份验证的教程?

我有一个遗留的web forms应用程序,我想在其中添加2FA,但我找到的所有教程都是为了在较新的ASP.NET Identity system中实现它。

不幸的是,从会员系统升级到身份系统现在不是一个选择。

EN

回答 2

Stack Overflow用户

发布于 2019-01-04 00:45:54

您需要编写一个自定义成员资格提供程序,并找到一种将多个凭据作为额外参数或使用新方法传递给MembershipProvider的方法。由于每个应用程序域只创建一次MembershipProvider,并且可以处理多个用户请求,因此最好不要在验证密码和第二个因素之间拆分调用。

我提出的解决方案实现了一个额外的接口,并在验证传递回服务器的凭据时检查提供程序是否支持该接口。

首先,定义一个接受多种因素(如密码和动态口令)的接口

代码语言:javascript
复制
public interface I2FAMembershipProvider
{
    bool ValidateUser2FA(string username, string firstFactor, string secondFactor);
}

然后在现有的MembershipProvider中实现这个额外的接口

代码语言:javascript
复制
public sealed class SampleProvider: MembershipProvider, I2FAMembershipProvider
{
    //Validate 2FA requests with both factors simultaneously
    public bool ValidateUser2FA(string username, string firstFactor, string secondFactor)
    {
        //... implementation here
    }

    //Traditional single factor authentication
    public override bool ValidateUser(string username, string passcode)
    {
        //... implementation here
    }

最后,在将凭据回发到服务器时验证凭据时,检查提供者是否支持此接口:

代码语言:javascript
复制
if (Membership.Provider is I2FAMembershipProvider)
{
    //Validation using enhanced interface
    if (((I2FAMembershipProvider) Membership.Provider).ValidateUser2FA(username, password, passcode))
    {
        FormsAuthentication.RedirectFromLoginPage(username, false);
    }
}
else
{
    //Traditional membership provider validation
    if (Membership.ValidateUser(username, password))
    {
        FormsAuthentication.RedirectFromLoginPage(username, false);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2021-09-06 10:24:01

上面描述的自定义成员资格提供程序绝对有用,但我使用的2FA实现是https://github.com/RobThree/TwoFactorAuth.Net,这是一个nuget package,做得非常好!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51510757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档