OpenID Connect 是什麼? | HENNGE Taiwan 部落格
文章推薦指數: 80 %
Authorization Server 的新稱呼為OpenID Provider,它除了可以發放Access Token 外,同時也可以發放ID Token。
OpenID Connect 的精華-- ID Token. OpenID ...
OpenIDConnect是什麼?
July7,2020
分享
大家好,今天我們來淺談什麼是OpenIDConnect。
雖然對這名詞本身可能不太熟悉,但我想大家在使用一些服務的時候,都有體驗過像下面這樣的一個登入方式。
https://ecvip.pchome.com.tw/login/v3/login.htm
在大家網購時常用的PChome登入頁面,除了輸入PChome自家帳號跟密碼的選項以外,也有一個快速登入的選項。
快速登入的選項中會有使用Google帳號登入、Apple帳號登入等等的選擇。
其實,像這樣可以讓使用者在其他平台上的帳號(以上面的例子來說是Google、Apple),登入到另外的服務上(以上面的例子來說是PChome),這件事情我們稱它為單一登入,英文會叫它Singlesign-on。
單一登入的實現方式有很多種,而OpenIDConnect就是能夠實作單一登入的技術之一。
在討論OpenIDConnect之前,不能避開的OAuth2.0
OpenIDConnect是OpenIDFoundation在2014年發布的OpenIDConnectCore1.0中定義的一個身分認證協議。
而它的設計理念是以當時就已被廣為使用的OAuth2.0的協議為基礎,再加上可以認證使用者的層次而成。
為什麼會採取這樣的方式呢?我們先來看看OAuth2.0的背景。
OAuth2.0(RFC6749)是IETF在2012年發布的一個為授權而設計的協議。
為什麼會需要「授權」呢?這跟近年來網際網路和雲端服務的起飛,並促使各項服務間連結需求的增加有很大的關係。
先讓我來舉一個簡單的例子。
現在有一個使用者,就假定是我自己本身。
我的行事曆資訊都放在我的GoogleCalendar上。
我現在想要使用一個可以做到比GoogleCalendar還要多功能的第三方行事曆服務。
這時候我就會想要讓這第三方行事曆服務得到我在GoogleCalendar上的行事曆資訊。
而如果是在一個只有帳號跟密碼的世界上,我就必須要把我的Google帳號和密碼告訴給這第三方服務行事曆服務,它才有辦法取得這些資訊。
但如果我把帳號密碼告訴了第三方,它可能就可以在暗地裡竊取行事曆以外的資訊,像是在Gmail裡的機密資訊。
這時候就出現了使用AccessToken來解決這個問題的協議,OAuth2.0。
*關於此途中的AccessToken的發放方式,為幫助理解細節有做簡化,敬請見諒。
AccessToken就像是一張兌換卷,每一張AccessToken上都有寫「誰」「對誰」「給予什麼樣的權限」,如此一來就可以在不告訴對方帳號密碼的情況下,給予對方最低限度需要的權限。
這就是為什麼OAuth2.0被稱為是一個授權的協議。
在OAuth2.0的世界中,我這個使用者被稱為ResourceOwner;第三方行事曆服務被稱之為Client;有放我行事曆資訊的GoogleCalendar稱為ResourceServer;幫忙發AccessToken的伺服器稱之為AuthorizationServer,在這例子中就會是Google。
從OAuth2.0到OpenIDConnect
但是解決了一個問題,新的問題就又跑出來了。
因為OAuth2.0的便利性,就出現了很多將OAuth2.0用為使用者登入驗證方式的服務。
但大家千萬不能忘記OAuth2.0只是一個定義如何使用AccessToken來授權的協議,內容是沒有提到如何去認證一個使用者的登入。
因此如果使用OAuth2.0做為使用者登入的認證機制,就會有很多意想不到的資安問題發生。
而再次的有人想出了一個在現有OAuth2.0的協議基礎下發放IDToken的方法來解決這個問題,這就是我們今天的主題所討論的OpenIDConnect。
重新介紹今天的主角--OpenIDConnect
因為OpenIDConnect是以OAuth2.0為基礎設計,因此使用方法上有很多的相似處。
角色也是其中一個,只是在OpenIDConnect中的Client有了一個新稱呼叫RelyingParty。
AuthorizationServer的新稱呼為OpenIDProvider,它除了可以發放AccessToken外,同時也可以發放IDToken。
OpenIDConnect的精華--IDToken
OpenIDConnect中定義的IDToken採取了JWS(JSONWebSignature,RFC7515)的規格。
也因為採用了JWS,收到這IDToken的服務即可以透過它的數位簽章確保此使用者的身分的正確性。
我個人是將IDToken比喻為可以被驗證的一張名片。
比如說當Client順利得到IDToken時,它的外觀會長的像是
eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUlMyNTYifQ.ewogImlzcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAsCiAibmFtZSI6ICJKYW5lIERvZSIsCiAiZ2l2ZW5fbmFtZSI6ICJKYW5lIiwKICJmYW1pbHlfbmFtZSI6ICJEb2UiLAogImdlbmRlciI6ICJmZW1hbGUiLAogImJpcnRoZGF0ZSI6ICIwMDAwLTEwLTMxIiwKICJlbWFpbCI6ICJqYW5lZG9lQGV4YW1wbGUuY29tIiwKICJwaWN0dXJlIjogImh0dHA6Ly9leGFtcGxlLmNvbS9qYW5lZG9lL21lLmpwZyIKfQ.rHQjEmBqn9Jre0OLykYNnspA10Qql2rvx4FsD00jwlB0Sym4NzpgvPKsDjn_wMkHxcp6CilPcoKrWHcipR2iAjzLvDNAReF97zoJqq880ZD1bwY82JDauCXELVR9O6_B0w3K-E7yM2macAAgNCUwtik6SjoSUZRcf-O5lygIyLENx882p6MtmwaL1hd6qn5RZOQ0TLrOYu0532g9Exxcm-ChymrB4xLykpDj3lUivJt63eEGGN6DH5K6o33TcxkIjNrCD4XB1CKKumZvCedgHHF3IAK4dVEDSUoGlH9z4pP_eWYNXvqQOjGs-rDaQzUHl6cQQWNiDpWOl_lxXjQEvQ
(此例參考了OpenIDConnectCore1.0中的例子。
)
乍看之下完全看不懂它在寫什麼,但是仔細一看會發現中間會有兩個「.」,它們可以將這整個IDToken分為三大部分。
去閱讀RFC7515,文件裡有說明JWS的構成是
BASE64URL(UTF8(JWSProtectedHeader))||'.'||BASE64URL(JWSPayload)||'.'||BASE64URL(JWSSignature)
我們就照他的意思將它們拆解後,用base64urldecode就可以得到像以下的內容。
Header
IDToken的Header
Payload
IDToken的Payload
Signature(是一個二進位的數據,用來驗證Header和Payload內容的完整性。
)
透過這樣的結構,Client就可以從Header裡得到的公鑰資訊和演算法資訊,驗證內容的IDToken內容的正確性,並將其驗證結果使用在使用者註冊及登入認證之上。
這就是OpenIDConnect的精華所在。
以上是OpenIDConnect的簡介。
結語
不管是哪一種單一登入的理念其實非常簡單。
對於使用者,使用單一登入的技術,就可以只要記住一組帳號密碼即登入所有已經串接好的服務;對於服務提供者,可以讓使用者不需要每次都重新輸入相同的註冊資訊,進而降低開始使用他們服務的門檻。
如此單一登入的技術帶給我了們強大的便利性,但同時也讓那一組帳號密碼的安全性更加受到注重。
如果是一家企業被要求的安全性等級就會比起個人使用時更加嚴謹、更加的嚴格。
大家不妨可以藉由這個機會,重新評估看看自己使用的帳號環境的安全性喔。
如果有任何問題,都歡迎在下方留言,或透過官網表單與我們聯繫。
喜歡這篇文章嗎?歡迎分享出去!
分享
WRITTENBY
SeishoJo
回到HENNGETaiwan部落格首頁
Lapsus$教會我的兩件事
May24,2022
運用社交工程駭入企業而聲名鵲起的Lapsus$令人聞風喪膽。
本文將帶您了解Lapsus$究竟教會了我們什麼,從兩個面向帶您看清駭客組織的面貌。
企業小心了!網路攻擊趨勢正在發生巨變
May17,2022
近日以來,來自Emotet和Lapsus$的網路攻擊越來越盛行,相較於過往,這些攻擊事件主要攻擊了商業結構中最脆弱的部份,導致企業們防不慎防。
零信任安全就因應而生,它的核心概念「永不信任,一律驗證」將是提升資安強度的關鍵!一起來深入了解吧!
100法則:持之以恆是通往成功的關鍵
May10,2022
我們在日常生活和工作中一定會有特別想做或特別擅長的事。
而100法則就是用來檢視這些長期目標的管用工具,它的意思很好理解,如果一個人要嘗試某種新東西,那麼他必須得嘗試100次來驗證結果。
本文將帶您深入了解100法則將如何應用與檢視。
如何加速你的成長?從認知「學習要點」開始!
April27,2022
人們每天都在日常生活中學習、成長,積累經驗並找出更具效率的工作方式。
其中,找出重要的Takeaways更是成長的關鍵。
本文將告訴您如何在任務與專案中尋找關鍵的學習要點。
SaaS到底貴不貴?從三個角度看優缺點
April15,2022
後疫情時代下SaaS服務越來越受到企業重視,儼然成為遠距工作的絕佳方案。
那麼相較於自建地端伺服器,SaaS又有什麼優勢呢?本文從三個面向帶您探討兩者的不同。
主管該如何帶領團隊?Panasonic經營之神教你管理的關鍵!
April8,2022
團隊合作是企業運作不可或缺的一環,也是主管和員工們的重要課題,本文從日本Panasonic創辦人松下幸之助的視角出發,探討松下所提出的管理方針與團隊合作的技巧,歡迎閱讀本文了解更多詳情!
延伸文章資訊
- 1What is OpenID? | OpenID
OpenID allows you to use an existing account to sign in to multiple websites, without needing to ...
- 2OpenID - Wikipedia
OpenID is an open standard and decentralized authentication protocol promoted by the non-profit O...
- 3從Azure AD 應用程式資源庫設定OpenID Connect OAuth 應用 ...
移至[企業應用程式] >[所有應用程式] 。 The Enterprise applications blade. 選取對話方塊頂端的[新增應用程式] 。 The New application...
- 4OpenID Connect | Google Identity
The implicit flow is used when a client-side application (typically a JavaScript app running in t...
- 5Control user access using OpenID Connect - AppSheet Help
You can use any authentication provider that supports the standard OpenID Connect protocol to con...