2. 在AccountController中添加ExternalLogin Action方法(注:该方法主要目的是调用AuthenticationManager的Challenge方法来触发微软身份验证中间件的ResponseChallenge方法来完成页面的跳转):
其中ChallengeResult是一个自定义的ASP.NET MVC Reuslt类型:
3. 加入第三方验证后的回调方法ExternalLoginCallback,该回调方法是获取第三方身份验证后的用户信息,然后在本地数据库中查找该用户,如果存在那么登录成功,否则需要对该用户信息进行补全。
4. 添加第三方账户信息补全页面及Action方法,其中action方法接收到补全的用户信息后完成用户注册功能,但要注意的是第三方账户没有密码,仅仅是在AspNetUserLogins表中添加了第三方验证的信息:
运行结果:
1.访问登录页面出现Microsoft的按钮(注:必须使用HTTPS地址才能正常的使用微软身份验证):
2. 点击微软身份验证按钮后,跳转到微软账户登录页面:
3. 完成登录后,由于是第一次登录,所以会跳转到信息补全页面:
输入邮箱后将登录成功:
数据库中的信息:
上图中可以看到无密码,然后在Login表中有一条数据:
实现双因子身份验证
Identity的双因子身份验证实际上是Identity的一个内置功能,为什么说是内置呢?因为只需要实现信息的发送(如邮件、短信等),然后再对Identity中的SignInManager进行简单的配置然后添加一些用于发送、填写验证码的页面就可以完成。所以首先需要完成的就是实现信息发送功能。
注:这里信息发送功能使用将信息写到硬盘的方式模拟。
1. 实现信息的发送:
在ASP.NET MVC默认的模板中就为我们创建了如下代码:
默认的邮件及短信发送器,只不过它没有实现,仅仅是返回了一个空值,现在使用写硬盘的方式将信息写到硬盘上:
2. 完成UserManager的双因子验证配置: