ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇 (2)

 2. 在AccountController中添加ExternalLogin Action方法(注:该方法主要目的是调用AuthenticationManager的Challenge方法来触发微软身份验证中间件的ResponseChallenge方法来完成页面的跳转):

   

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  其中ChallengeResult是一个自定义的ASP.NET MVC Reuslt类型:

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  3. 加入第三方验证后的回调方法ExternalLoginCallback,该回调方法是获取第三方身份验证后的用户信息,然后在本地数据库中查找该用户,如果存在那么登录成功,否则需要对该用户信息进行补全。

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  4. 添加第三方账户信息补全页面及Action方法,其中action方法接收到补全的用户信息后完成用户注册功能,但要注意的是第三方账户没有密码,仅仅是在AspNetUserLogins表中添加了第三方验证的信息:

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

 

  运行结果:
  1.访问登录页面出现Microsoft的按钮(注:必须使用HTTPS地址才能正常的使用微软身份验证):

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  2. 点击微软身份验证按钮后,跳转到微软账户登录页面:

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  3. 完成登录后,由于是第一次登录,所以会跳转到信息补全页面:

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  输入邮箱后将登录成功:

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  数据库中的信息:

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  上图中可以看到无密码,然后在Login表中有一条数据:

  

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

实现双因子身份验证

  Identity的双因子身份验证实际上是Identity的一个内置功能,为什么说是内置呢?因为只需要实现信息的发送(如邮件、短信等),然后再对Identity中的SignInManager进行简单的配置然后添加一些用于发送、填写验证码的页面就可以完成。所以首先需要完成的就是实现信息发送功能。
  注:这里信息发送功能使用将信息写到硬盘的方式模拟。
  1. 实现信息的发送:
  在ASP.NET MVC默认的模板中就为我们创建了如下代码:

   

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  默认的邮件及短信发送器,只不过它没有实现,仅仅是返回了一个空值,现在使用写硬盘的方式将信息写到硬盘上:

   

ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证代码篇

  2. 完成UserManager的双因子验证配置:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywsjx.html