本文在 2019/4/3 更新到 .NET Core 2.2git
前面咱们提到过IdentityServer4是能够添加外部认证的,若是外部认证支持OAuth2,那么添加到IdentityServer4是很是简单的,在ASP.NET Core下提供了很是多的外部认证明现,好比Google,Facebook,Twitter,Microsoft账户和OpenID Connect等,可是对于咱们国内来讲最经常使用的莫过于QQ登陆。github
1.访问QQ互联官方网站:https://connect.qq.com/ide
2.点击“应用管理”-> “建立应用”,填写你的网站信息,这里的信息请不要胡乱填写,这个会影响审核的,之后要是修改了这些信息须要从新审核。测试
填写完善资料的时候,惟一一个须要注意的就是回调地址,这里咱们后面详细介绍。网站
3.等待审核结果,这里审核仍是很是快的,通常一天左右就好了ui
注意:若是网站没有备案号我不知道是否能经过申请,我本身是拥有备案号的,而后网站LOGO必须上传,否则会申请不过的。3d
QQ登陆是支持OAuth2,因此能够集成到IdentityServer4。code
1.先经过Nuget将 Unicorn.AspNetCore.Authentication.QQ
组件添加到项目中server
2.配置QQ登陆信息blog
在Startup
类的ConfigureServices
方法里添加以下代码:
services.AddAuthentication() .AddQQ("QQ", qqOptions => { qqOptions.AppId = "<insert here>"; qqOptions.AppKey = "<insert here>"; })
3.在QQ互联后台配置回调地址
回调地址是随时能够在QQ互联后台配置的,由于这个回调地址已经在QQ登陆组件里定义了的,因此此处配置为:
http://你的IdentityServer4地址/signin-qq
好比:
http://localhost:2692/signin-qq http://www.baidu.com/signin-qq
4.编写扩展登陆逻辑
2019/4/3因为更新的缘由,移除了原来帖的部分逻辑代码,请直接查看Demo
我画了一张图来表示这个流程:
具体的code请你们查看demo,这里就不帖太多了。
2019/4/3 因为使用官方最新Demo来进行修改,图中的一个Action名称:ExternalLoginCallback已经变了,详情请查看Demo 代码
1.打开登陆页面,点击“QQ”
2.从QQ登陆
咱们经过第一步,跳转到了QQ的登陆页面:
登陆以后,QQ也有相应的提醒:
登陆以后跳转回咱们本身的程序:
这里显示的名称是根据QQ获取用户信息接口返回的QQ昵称
同时,咱们也能够在QQ互联里面的受权管理查看咱们刚刚受权登陆的信息:
1.你们下载demo查看以后会发现,我没有从nuget使用Microsoft.AspNetCore.Authentication.QQ这个组件,是由于这个组件在根据QQ返回的用户信息封装Claim时,少了两个字段,过不了IdentityServer4的检测,我修改补上了。
2.若是遇到其余异常能够用抓包软件好比fiddler,抓一下与QQ通讯的请求信息,看看是否有异常。
3.Demo运行,只运行QuickstartIdentityServer
这一个项目就能够看到效果。