今天就跟大家聊聊有關(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,下同)的文章,對:
// 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,我們用下抓包工具觀察下登錄流程。
sso.client.net是客戶端,而登錄頁在sso.client.net服務(wù)端
我們先打開需要登錄才可以訪問的:http://sso.client.net/Home/Secure
這里302到了授權(quán)端點 http://odic.server.net/connect/authorize
這就是步驟1中, 302挑戰(zhàn)的授權(quán)端點攜帶的參數(shù)。
點擊登錄,跳轉(zhuǎn)到是否授權(quán)頁面,這個頁面不一定展示,可通過配置Client的RequireConsent=false,跳過這個頁面。
可以清楚的看到去到了:
http://odic.server.net/connect/authorize/callback
callback,哦,這是一個登錄回調(diào),它干了啥呢,我們仔細看響應(yīng):
我們看到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:
單點登出我就不細說了,使用:
//指定登錄方案的方式登出
await HttpContext.SignOutAsync(IdentityServerConstants.DefaultCookieAuthenticationScheme);
//或者直接
await HttpContext.SignOutAsync();
暴力點刪除cookie也可以,不過那只能算是半退出狀態(tài)吧。
通過對以上一個使用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è)資訊頻道,感謝大家的支持。