單點(diǎn)登陸系統(tǒng)對比

作者:劉賓焦人, thomas_liub@hotmail.com
請尊重作者著作權(quán)挥吵,轉(zhuǎn)載請注明出處,謝謝花椭!


SSO筆記

典型的SSO機(jī)制

Kerberos

  • 麻省理工大學(xué)發(fā)明
  • 客戶端/服務(wù)器結(jié)構(gòu)與DES加密技術(shù)忽匈,并且能夠進(jìn)行相互認(rèn)證,即客戶端和服務(wù)器端均可對對方進(jìn)行身份認(rèn)證
  • 一種應(yīng)用對稱密鑰體制進(jìn)行密鑰管理的系統(tǒng)矿辽,支持SSO
  • 不適應(yīng)互聯(lián)網(wǎng)環(huán)境
  • UNIX 和 Windows 作為默認(rèn)的安全認(rèn)證服務(wù)集成進(jìn)操作系統(tǒng)
  • 蘋果的Mac OS X也使用了Kerberos的客戶和服務(wù)器版本
  • Red Hat Enterprise Linux4 和后續(xù)的操作系統(tǒng)使用了Kerberos的客戶和服務(wù)器版本

OAuth2

  • 名詞解釋
    • Third-party application:第三方應(yīng)用程序丹允,本文中又稱"客戶端"(client),即上一節(jié)例子中的"云沖印"袋倔。
    • HTTP service:HTTP服務(wù)提供商嫌松,本文中簡稱"服務(wù)提供商",即上一節(jié)例子中的Google奕污。
    • Resource Owner:資源所有者萎羔,本文中又稱"用戶"(user)。
    • User Agent:用戶代理碳默,本文中就是指瀏覽器贾陷。
    • Authorization server:認(rèn)證服務(wù)器,即服務(wù)提供商專門用來處理認(rèn)證的服務(wù)器嘱根。
    • Resource server:資源服務(wù)器髓废,即服務(wù)提供商存放用戶生成的資源的服務(wù)器。它與認(rèn)證服務(wù)器该抒,可以是同一臺服務(wù)器慌洪,也可以是不同的服務(wù)器。
  • 授權(quán)模式
    • 授權(quán)碼模式(authorization code)



      (A)用戶訪問客戶端,后者將前者導(dǎo)向認(rèn)證服務(wù)器冈爹。
      (B)用戶選擇是否給予客戶端授權(quán)涌攻。
      (C)假設(shè)用戶給予授權(quán),認(rèn)證服務(wù)器將用戶導(dǎo)向客戶端事先指定的"重定向URI"(redirection URI)频伤,同時(shí)附上一個授權(quán)碼恳谎。
      (D)客戶端收到授權(quán)碼,附上早先的"重定向URI"憋肖,向認(rèn)證服務(wù)器申請令牌因痛。這一步是在客戶端的后臺的服務(wù)器上完成的,對用戶不可見岸更。
      (E)認(rèn)證服務(wù)器核對了授權(quán)碼和重定向URI鸵膏,確認(rèn)無誤后,向客戶端發(fā)送訪問令牌(access token)和更新令牌(refresh token)

    • 簡化模式(implicit)


    • 密碼模式(resource owner password credentials)


    • 客戶端模式(client credentials)


  • 令牌更新
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA

OpenID

  • OpenID 是一個以用戶為中心的數(shù)字身份識別框架怎炊,它具有開放谭企、分散性
  • 沒有實(shí)現(xiàn)SSO, 沒有驗(yàn)證所有party
  • 結(jié)合OAuth
  • 僅web應(yīng)用

OpenID connect

  • 開源項(xiàng)目
  • 登陸訪問步驟
    1. 【百度域】,初始訪問服務(wù)结胀,無授權(quán)碼赞咙,無access token
      http://www.baidu.com
      
    2. 【CAS域】责循,網(wǎng)關(guān)發(fā)起重定向?yàn)g覽器到CAS
      http://192.168.1.28:8091/openid/authorize?client_id=717771&redirect_uri=http://www.baidu.com&response_type=code&scope=openid%20email%20profile&state=123123
      
    3. 【CAS域】糟港,無session id, CAS重定向授權(quán)(瀏覽器重定向)
      http://192.168.1.28:8091/accounts/login/?next=/openid/authorize%3Fclient_id%3D717771%26redirect_uri%3Dhttp%3A//www.baidu.com%26response_type%3Dcode%26scope%3Dopenid%2520email%2520profile%26state%3D123123
      
    4. 【CAS域】,用戶登陸院仿,登陸成功后設(shè)置CAS域session id到cookie
      http://192.168.1.28:8091/accounts/login
      http://192.168.1.28:8091/accounts/logout
      
    5. 【CAS域】秸抚,登陸后,跳回CAS授權(quán)
      http://192.168.1.28:8091/openid/authorize?client_id=717771&redirect_uri=http://www.baidu.com&response_type=code&scope=openid%20email%20profile&state=123123
      
    6. 【百度域】歹垫,重定向?yàn)g覽器到訪問服務(wù)剥汤,帶授權(quán)碼
      https://www.baidu.com/?state=123123&code=ed27cf5ee1ac4c8784126bbf825ccb45
      
    7. 【百度域】,網(wǎng)關(guān)根據(jù)授權(quán)碼排惨,獲取token吭敢,code -> tokens,設(shè)置access token到cookie
      curl -X POST \
          -H "Cache-Control: no-cache" \
          -H "Content-Type: application/x-www-form-urlencoded" \
          "http://192.168.1.28:8091/openid/token/" \
          -d "client_id=717771" \
          -d "client_secret=1ac931638624e5d8ae002aaeaec4302031db92e7451edf36e0d008c9" \
          -d "code=ed27cf5ee1ac4c8784126bbf825ccb45" \
          -d "redirect_uri=http://www.baidu.com" \
          -d "grant_type=authorization_code"
      
      返回:
      {
          "access_token": "82b35f3d810f4cf49dd7a52d4b22a594",
          "token_type": "bearer",
          "expires_in": 3600,
          "refresh_token": "0bac2d80d75d46658b0b31d3778039bb",
          "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijc0NTU5ZGE1NTQzMTY4YzFiYTQ3OWJiMWFlMmRjMGRhIn0.eyJzdWIiOiIxIiwiaXNzIjoiaHR0cDovLzE5Mi4xNjguMS4yODo4MDkxL29wZW5pZCIsImF0X2hhc2giOiI2R0tQM1RfS09GcFBmNWh5bFNPMmxnIiwiZXhwIjoxNDkwNzUzODYxLCJhdXRoX3RpbWUiOjE0OTA2ODcxMTQsImlhdCI6MTQ5MDc1MzI2MSwiYXVkIjoiNzE3NzcxIn0.vzFWuo99uM2HK2TWML8zE5sLpEjg5NGSFMzxKbtYUrr_EDRghlZJwh1w8VHEzPDIbNfRfeOwqPC9nhbl2q1yJS1F8vJRrBVtBpyawLGqAr3_SBwA9Xx3AmZR5X8Xid-3SHqGu3n93gD-XbvP_gcvrdsfgmHJK5PWjqj1jA_5zMM"
      }
      
    8. 【百度域】,讀取用戶信息
      http://192.168.1.28:8091/openid/userinfo/?access_token=82b35f3d810f4cf49dd7a52d4b22a594
      
    9. 【百度域】,刷新token
      curl -X POST \
          -H "Cache-Control: no-cache" \
          -H "Content-Type: application/x-www-form-urlencoded" \
          "http://192.168.1.28:8091/openid/token/" \
          -d "client_id=717771" \
          -d "grant_type=refresh_token" \
          -d "refresh_token=0bac2d80d75d46658b0b31d3778039bb"
          -d "client_secret=1ac931638624e5d8ae002aaeaec4302031db92e7451edf36e0d008c9"
      
  • 登出訪問步驟
    1. 【百度域】,瀏覽器訪問百度域退出
      http://www.baidu.com/logout
      
    2. 【CAS域】暮芭,重定向?yàn)g覽器到CAS域鹿驼,攜帶CAS域session id
      http://192.168.1.28:8091/acconts/logout
      

webSSO

  • 適合本地資源和互聯(lián)網(wǎng)融合,local辕宏, internet and cloud infrastructures

CAS

  • CAS協(xié)議流程,基礎(chǔ)模式
    • TGT (ticket granting ticket):user name, TGC...
      • TGT 的存活周期默認(rèn)為 120 分鐘
    • TGC(ticket granting cookie)
      • TGC 是用戶持有對自己身份信息的一種憑據(jù)
      • TGC 是 CAS Server 通過 SSL 方式發(fā)送給終端用戶
    • ST(service ticket)
      • 在一段時(shí)間內(nèi)失效畜晰,存活周期默認(rèn)為5分鐘
      • ST 只能使用一次
      • ST 是基于隨機(jī)數(shù)生成的
CAS
  1. 瀏覽器訪問應(yīng)用A(CAS client)
  2. CAS client發(fā)現(xiàn)無ST,無session,重定向到CAS server
  3. 用戶完成登陸認(rèn)證
    1. 用戶登陸
    2. CAS server生成TGT對象瑞筐,加入cookie
    3. 分配ST,加入cookie
  4. 重定向回應(yīng)用(CAS client)凄鼻,帶TGC, ST
  5. 應(yīng)用CAS client驗(yàn)證(ST,TGC)
  6. CAS server驗(yàn)證ST,返回username如成功
  7. CAS client建立用戶session
  • CAS協(xié)議流程,代理模式
    • PGT, 是 CAS Client 端持有的對用戶身份信息的一種憑據(jù)

CAS Vs OpenIDConnect

  1. CAS不支持OAuth2. Fackbook, Google, Yahoo采用OAuth2做認(rèn)證, 而且目前85%認(rèn)證系統(tǒng)采用OAuth2
  2. 大部分采用OAuth2的系統(tǒng)將來會采用OpenIDConnect
  3. CAS缺失很多功能块蚌,不支持feature
    1. 動態(tài)client注冊闰非,發(fā)現(xiàn)
    2. 用戶claim, client claim
  4. Even SAML support is weak
  5. CAS實(shí)現(xiàn)多步驟認(rèn)證困難,大部分是基于用戶名/口令方式
  • 結(jié)論
    如果可能盡量用OpenIDConnect,在過度階段可以采用SAML方案從CAS到OpenIDConnect匈子。
    Conclusion

Like the little ant, OpenID Connect has high hopes. Where possible, use it. Make sure developers understand the roadmap for your organization: your domain, like all the other domains on the Internet, will adopt OpenID Connect. Use SAML to fill in the gaps until all the OpenID Connect libraries and web server plugins are available. SAML is going to be around much longer than CAS, so its a better bridge solution. Use CAS only as a last resort. You should require products and software that supports the identity integration method that align with your roadmap. Be flexible…using CAS is better than the app storing its own passwords. However, realize that this application will probably never support the two factor authentication services available in OAuth2 and SAML. There are many “good” legacy SSO protocols, don’t forget Siteminder in the Enterprise world… however, if you’re faced with the situation… try NOT TO CAS.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末河胎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子虎敦,更是在濱河造成了極大的恐慌游岳,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件其徙,死亡現(xiàn)場離奇詭異胚迫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)唾那,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門访锻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闹获,你說我怎么就攤上這事期犬。” “怎么了避诽?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵龟虎,是天一觀的道長。 經(jīng)常有香客問我沙庐,道長鲤妥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任拱雏,我火速辦了婚禮棉安,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘铸抑。我一直安慰自己贡耽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布鹊汛。 她就那樣靜靜地躺著蒲赂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柒昏。 梳的紋絲不亂的頭發(fā)上凳宙,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音职祷,去河邊找鬼氏涩。 笑死届囚,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的是尖。 我是一名探鬼主播意系,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饺汹!你這毒婦竟也來了蛔添?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤兜辞,失蹤者是張志新(化名)和其女友劉穎迎瞧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逸吵,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了韩脑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖粥航,靈堂內(nèi)的尸體忽然破棺而出柄延,到底是詐尸還是另有隱情搜吧,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站忌锯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啄枕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一常空、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昆禽,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惊畏。三九已至,卻和暖如春社搅,著一層夾襖步出監(jiān)牢的瞬間暮的,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工咙咽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溉苛。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓镜廉,卻偏偏與公主長得像炊昆,于是被迫代替她去往敵國和親威根。 傳聞我的和親對象是個殘疾皇子敢茁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容