真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何理解基于的OIDC實現(xiàn)單點登錄的原理

今天就跟大家聊聊有關(guān)如何理解基于的OIDC實現(xiàn)單點登錄的原理,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了平度免費建站歡迎大家使用!

不知大家有沒有體會,好像看了很多id4(IdentityServer4,下同)的文章,對:

    我們看看發(fā)生了啥:

    站點App1

    1. 用戶首次訪問web App1,App1發(fā)現(xiàn)用戶未登錄,攜帶目前訪問地址302到CAS Server登錄頁。

    2. CAS Server登錄頁檢查登錄Session不存在,返回一個登錄頁面。

    3. 填寫賬號,點擊登錄。

    4. CAS Server驗證賬號信息成功,創(chuàng)建一個Ticket Granting Ticket(TGT),這個TGT就是當(dāng)前登錄用戶的session key。同時,創(chuàng)建一個service ticket并攜帶service ticket key,st key 作為參數(shù)跳轉(zhuǎn)回App1。

    5. App1用get發(fā)送st key 去CAS Server驗證,驗證通過后返回登錄用戶信息。

    6. App1使用返回的登錄用戶信息構(gòu)建當(dāng)前系統(tǒng)的登錄狀態(tài),并用一個JSESSIONID標(biāo)記(JSESSIONID是Apache的默認(rèn)名),并攜帶這個JSESSIONID重新訪問App1。

    7. App1驗證JSESSIONID,登錄成功,展示登錄成功頁面。

    8. 第二次訪問,驗證JSESSIONID,直接訪問。

    站點App2

    1. 用戶首次訪問web App2,App2發(fā)現(xiàn)用戶未登錄,攜帶目前訪問地址302到CAS Server登錄頁。

    2. CAS Server登錄頁攜帶有App1生成的TGT,那么直接做TCT的驗證,驗證成功不需要登錄,創(chuàng)建一個App2的st key,302回App2。

    3. 后續(xù)和以上的5,6,7,8 補邏輯相同,不贅述。

    CAS的流程大概于此,實際的實現(xiàn)可能會復(fù)雜一點,可能會遇到各式各樣的問題。但有理論支撐,總體實現(xiàn)起來還是簡單,可靠有保證的。

    下面說說基于Id4的OIDC是怎么做單點登錄的。

    SSO—基于Id4的OIDC實現(xiàn)簡析

    先準(zhǔn)備環(huán)境

    把官方samples下下來:https://github.com/IdentityServer/IdentityServer4/tree/master/samples

    我刪掉了其他項目,剩下這兩個,一目了然:

    如何理解基于的OIDC實現(xiàn)單點登錄的原理

    配置IdentityServer,Configs添加這么一個客戶端:

    // sso implicit client
    new Client
    {
       ClientId = "ssoimplicit",  //這個client id 跟 MfcImplicit 里面的配置要一致
       ClientName = "sso implicit clinet",
       AllowedGrantTypes = GrantTypes.Implicit,
       RedirectUris = { "http://sso.client.net/signin-oidc">    PostLogoutRedirectUris = { "http://sso.client.net/signout-callback-oidc" },
       AllowedScopes = new List
       {
           IdentityServerConstants.StandardScopes.OpenId,
           IdentityServerConstants.StandardScopes.Profile,
           IdentityServerConstants.StandardScopes.Email
       }
    }

    ok,我們用下抓包工具觀察下登錄流程。

    1、受保護客戶端頁面的訪問

    sso.client.net是客戶端,而登錄頁在sso.client.net服務(wù)端

    我們先打開需要登錄才可以訪問的:http://sso.client.net/Home/Secure

    如何理解基于的OIDC實現(xiàn)單點登錄的原理

    這里302到了授權(quán)端點 http://odic.server.net/connect/authorize

    2、授權(quán)端點對客戶端請求的驗證

    這就是步驟1中, 302挑戰(zhàn)的授權(quán)端點攜帶的參數(shù)。

    如何理解基于的OIDC實現(xiàn)單點登錄的原理

    點擊登錄,跳轉(zhuǎn)到是否授權(quán)頁面,這個頁面不一定展示,可通過配置Client的RequireConsent=false,跳過這個頁面。

    如何理解基于的OIDC實現(xiàn)單點登錄的原理

    可以清楚的看到去到了:

    http://odic.server.net/connect/authorize/callback

    callback,哦,這是一個登錄回調(diào),它干了啥呢,我們仔細看響應(yīng):

    如何理解基于的OIDC實現(xiàn)單點登錄的原理

    我們看到id_token帶有登錄用戶的信息:

    iss:token發(fā)放的服務(wù)器地址

    aud:clientid

    sid:會話信息

    kid:當(dāng)前token的標(biāo)識符

    name:用戶名

    此外還有比如id_token的發(fā)放時間,過期時間,nonce,用戶非機密信息等等。還有藍色部分需要使用客戶端公鑰驗證的簽名等等。

    這個時候客戶端已經(jīng)拿到登錄用戶的信息了,這時客戶端直接使用登錄用戶信息,構(gòu)建當(dāng)前應(yīng)用sso.client.net的登錄狀態(tài)即可。

    比如下面的這個 Set名為Implicit的Cookie:

    如何理解基于的OIDC實現(xiàn)單點登錄的原理

    單點登出

    單點登出我就不細說了,使用:

    //指定登錄方案的方式登出
    await HttpContext.SignOutAsync(IdentityServerConstants.DefaultCookieAuthenticationScheme);

    //或者直接
    await HttpContext.SignOutAsync();

    暴力點刪除cookie也可以,不過那只能算是半退出狀態(tài)吧。

    總結(jié)

    通過對以上一個使用Id4構(gòu)建的OIDC實現(xiàn)的登錄流程來看,OIDC的SSO它完全無光域名的,id4登錄成功后,客戶端通過使用id_token來構(gòu)建自身的登錄狀態(tài),一個client如此,N個皆然。

    大家好像感覺這個SSO的實現(xiàn)方式跟前面的CAS流程很像誒,我們再看一遍前面CAS的圖,好像是發(fā)現(xiàn)了啥不得了的東西。

    沒錯:openid也是基于CAS流程的一個實現(xiàn)(我根據(jù)理解猜的 沒有證據(jù))。

    再多說兩句

    id4確實是好東西,暫時用不上也要多了解、學(xué)習(xí),最好寫個博客做個筆記加深下理解。

    在理解的基礎(chǔ)上不要去背各種Flow有啥區(qū)別什么的,知道什么場景下用那種流程就行,也沒幾個。

    看完上述內(nèi)容,你們對如何理解基于的OIDC實現(xiàn)單點登錄的原理有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


    新聞名稱:如何理解基于的OIDC實現(xiàn)單點登錄的原理
    文章網(wǎng)址:http://weahome.cn/article/jpgpsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部