本章主要内容有:
● 实现基于微软账户的第三方身份验证
● 实现双因子身份验证
● 验证码机制
在微软提供的ASP.NET MVC模板代码中,默认添加了微软、Google、twitter以及Facebook的账户登录代码(虽然被注释了),另外针对国内的一些社交账户提供了相应的组件,所有组件都可以通过Nuget包管理器安装:
从上图中看到有优酷、微信、QQ、微博等组件,其中一些是微软提供的,一些是其它开发者提供的。而本文将使用微软账户为例来介绍如何实现一个第三方登录。
注:本章主要代码参考ASP.NET MVC模板代码,所以在文章中只列出关键代码,其余代码与模板中的完全一致。
在开发之前首先需要通过Nuget安装Microsoft.Owin.Security.MicrosoftAccount:
另外就是需要去微软的开发者中心使用微软账户创建一个自己的应用信息https://apps.dev.microsoft.com/,并保存应用的ID以及密钥用于对身份验证中间件进行配置:
创建过程如下:
1. 点击添加应用按钮,进入应用程序注册页面,填写应用名称并点击Create按钮(注:由于我已经有一个名称为My Blog的App,所以下面的Test App的创建流程仅仅是用于演示,后续的身份验证实际上是使用之前创建的My Blog):
2. 在后续页面中点击生成新密码来生成密钥(注:该密码只显示一次,需要在弹出框中复制并保存下来):
3. 添加平台:点击添加平台按钮,添加一个Web平台,并在平台的重定向Url中填入本地调试的地址信息(注:一定需要启动HTTPS并且地址后需要添加signin-microsoft,VS可以在项目的属性中开启SSL,并设置SSL的URL):
4. 保存更改。
添加中间件在上一篇文章中介绍了,第三方账户身份验证除了特定账户身份验证中间件外,还需要添加一个消极模式的外部Cookie身份验证中间件,所以首先需要在项目的Startup文件中添加一下代码:
然后再在该中间件后加入微软身份验证中间件(注:中间件顺序会影响处理流程,微软身份验证中间件必须在外部Cookie中间件后),并设置上面创建的应用ID及密钥:
添加Controller及页面的功能支持
现在可以说应用中已经支持微软的账户身份验证了,但是在应用中还未提供微软身份验证的入口,以及登陆后用户信息的补全等功能。
1. 在页面上添加验证入口,在Login页面上加入以下代码,通过AuthenticationManager来获取所有的第三方身份验证方式,并生成对应链接: