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


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

前言

前面我們提到過IdentityServer4是可以添加外部認證的,如果外部認證支持OAuth2,那么添加到IdentityServer4是非常簡單的,在ASP.NET Core下提供了非常多的外部認證實現,比如Google,Facebook,Twitter,Microsoft帳戶和OpenID Connect等,但是對於我們國內來說最常用的莫過於QQ登錄。

申請QQ登錄

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

2.點擊“應用管理”-> “創建應用”,填寫你的網站信息,這里的信息請不要胡亂填寫,這個會影響審核的,以后要是修改了這些信息需要重新審核。

填寫完善資料的時候,唯一一個需要注意的就是回調地址,這里我們后面詳細介紹。

3.等待審核結果,這里審核還是非常快的,一般一天左右就行了

注意:如果網站沒有備案號我不知道是否能通過申請,我自己是擁有備案號的,然后網站LOGO必須上傳,不然會申請不過的。

添加QQ登錄

QQ登錄是支持OAuth2,所以可以集成到IdentityServer4。

1.先通過Nuget將 Unicorn.AspNetCore.Authentication.QQ 組件添加到項目中

2.配置QQ登錄信息

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM