IdentityServer4(10)- 添加對外部認證的支持之QQ登陸

本文在 2019/4/3 更新到 .NET Core 2.2git

前言

前面咱們提到過IdentityServer4是能夠添加外部認證的,若是外部認證支持OAuth2,那麼添加到IdentityServer4是很是簡單的,在ASP.NET Core下提供了很是多的外部認證明現,好比Google,Facebook,Twitter,Microsoft賬戶和OpenID Connect等,可是對於咱們國內來講最經常使用的莫過於QQ登陸。github

申請QQ登陸

1.訪問QQ互聯官方網站:https://connect.qq.com/ide

2.點擊「應用管理」-> 「建立應用」,填寫你的網站信息,這裏的信息請不要胡亂填寫,這個會影響審覈的,之後要是修改了這些信息須要從新審覈。測試

填寫完善資料的時候,惟一一個須要注意的就是回調地址,這裏咱們後面詳細介紹。網站

3.等待審覈結果,這裏審覈仍是很是快的,通常一天左右就好了ui

注意:若是網站沒有備案號我不知道是否能經過申請,我本身是擁有備案號的,而後網站LOGO必須上傳,否則會申請不過的。3d

添加QQ登陸

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.編寫擴展登陸邏輯

請直接查看Demo代碼:https://github.com/stulzq/IdentityServer4.Samples/tree/master/Quickstarts/4_ImplicitFlowAuthenticationWithExternal

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這一個項目就能夠看到效果。

Demo地址:https://github.com/stulzq/IdentityServer4.Samples/tree/master/Quickstarts/4_ImplicitFlowAuthenticationWithExternal
相關文章
相關標籤/搜索