>
>單個登錄(SSO)是一個過程,該過程允許用戶在使用用戶身份驗證(即登錄一次)後訪問多個服務。這涉及到登錄主要服務後,用戶已授予所有服務的身份驗證。除其他好處外,SSO避免了通過密碼或其他身份驗證系統一遍又一遍地確認身份的單調任務。>
>讓我們更詳細地研究SSO,我們將使用非常著名的服務來展示其用途和好處。身份驗證過程
第一步是登錄主要服務(例如,Facebook或Google)。
>當您構建自己的產品時,您需要確保其所有組件都使用相同的身份驗證。當您的所有服務都局限於您自己的代碼庫時,這很容易做到。但是,借助諸如Disqus評論系統和用於客戶關係管理的Freshdesk之類的流行服務,最好使用這些服務,而不是從頭開始創建自己的。
,但是使用此類第三方服務引起了一個問題。由於他們的代碼託管在各自的服務器上,因此用戶也需要在其服務上明確登錄,即使他們登錄到您的網站。如前所述,解決方案是SSO的實現。>理想情況下,您提供了一雙鑰匙 - 公共和私人。您為登錄用戶生成一個令牌,並將其與您的公鑰一起發送到服務以進行驗證。經過驗證後,用戶將自動登錄到服務。為了更好地理解這一點,讓我們以一個真實的例子。
>disqus sso
>由於DISQUS評論系統已嵌入您的頁面中,因此,如果他或她已經在您的網站上登錄,則必須在Disqus中第二次登錄。 Disqus具有有關如何集成SSO的廣泛文檔。
>您首先使用私人和公共disqus api鍵生成一個稱為remote_auth_s3的密鑰,用於登錄用戶。當您將SSO註冊為Disqus中的免費附加組件時,您將提供公共和私鑰。>您將用戶的信息(ID,用戶名和電子郵件)傳遞給DISQU,以作為JSON的身份驗證。您會在頁面上渲染DISQUS系統時生成一條消息。為了更好地理解它,讓我們看看用Python編寫的示例。
>
> disqus在github上提供了幾種流行語言中的代碼示例。。
生成消息>示例Python代碼(在GitHub上找到可以在您的網站上登錄用戶如下。
>初始化disqus註釋
然後,您在JavaScript請求中將此生成的令牌以及您的公鑰發送到Disqus。如果驗證身份驗證,生成的註釋系統已經登錄了。>我們可以在博客碗上看到SSO的實現,該博客碗是Python/Django開發的博客目錄。如果您已登錄到網站,則應在渲染DISQUS評論系統時登錄。在此示例中,該人對象存儲ID(對於網站上的每個人來說是唯一的),電子郵件和PEN_NAME。該消息的生成如下所示。
<span>import base64 </span><span>import hashlib </span><span>import hmac </span><span>import simplejson </span><span>import time </span> DISQUS_SECRET_KEY <span>= '123456' </span>DISQUS_PUBLIC_KEY <span>= 'abcdef' </span> <span>def get_disqus_sso(user): </span> <span># create a JSON packet of our data attributes </span> data <span>= simplejson.dumps({ </span> <span>'id': user['id'], </span> <span>'username': user['username'], </span> <span>'email': user['email'], </span> <span>}) </span> <span># encode the data to base64 </span> message <span>= base64.b64encode(data) </span> <span># generate a timestamp for signing the message </span> timestamp <span>= int(time.time()) </span> <span># generate our hmac signature </span> sig <span>= hmac.HMAC(DISQUS_SECRET_KEY, '%s %s' % (message, timestamp), hashlib.sha1).hexdigest() </span> <span># return a script tag to insert the sso message </span> <span>return """<script type="text/javascript"> </span><span> var disqus_config = function() { </span><span> this.page.remote_auth_s3 = "%(message)s %(sig)s %(timestamp)s"; </span><span> this.page.api_key = "%(pub_key)s"; </span><span> } </span><span> </script>""" % dict( </span> message<span>=message, </span> timestamp<span>=timestamp, </span> sig<span>=sig, </span> pub_key<span>=DISQUS_PUBLIC_KEY, </span> <span>)</span>
>在前端,您只需打印此變量即可執行腳本。有關現場演示,您可以在博客碗中訪問此帖子,並檢查底部的評論。自然,您不會登錄。
>
接下來,登錄博客碗,再次訪問同一帖子(您需要登錄以查看效果)。請注意,您已登錄下面的評論系統。
>
>博客碗提供的另一個有趣的功能是匿名,在發佈內容時(如本文)。想一想一種情況,您希望用戶以匿名用戶(例如在Quora上)發布有關DISQU的評論的答复。我們以簡單的方式出路,並在ID上附加了大量。為了與用戶相關聯(因此,它與用戶的其他評論都不會出現),我們也會生成一個唯一的電子郵件。這樣可以將您的匿名評論融合在一起,但並不將其與其他用戶的原始個人資料或匿名評論相結合。
>
,這是代碼:
sso <span>= get_disqus_sso({ </span> <span>'id': person.id, </span> <span>'email': person.user.email, </span> <span>'username': person.pen_name </span><span>})</span>
儘管不同服務的SSO過程略有不同,但是它們背後的基本思想是相同的 - 生成令牌並驗證它!我希望這篇文章能幫助您深入了解應用程序如何集成SSO,也許這將幫助您自己實施SSO。
如果您有任何糾正,問題或與SSO共享自己的經驗,請隨時發表評論。>關於單次登錄(SSO)
>單登錄(SSO)是否存在任何風險?帶有潛在的風險。如果用戶的SSO憑據受到損害,攻擊者可以訪問與這些憑據相關的所有應用程序。因此,實施強大的安全措施(例如多因素身份驗證和常規密碼更新)以減輕這些風險至關重要。
SSO和MFA都是身份驗證方法,但它們的目的不同。 SSO通過允許用戶訪問具有一組憑據的多個應用程序來簡化登錄過程。另一方面,MFA通過要求用戶在授予訪問之前提供兩種或多種形式的身份證明來增強安全性。
>>哪些行業可以從單個登錄(SSO)(SSO)中受益?受益於SSO。嚴重依賴多個應用程序(例如醫療保健,教育,金融和技術)的行業尤其可以從SSO提供的便利性和安全性中受益。
以上是單登錄(SSO)解釋了的詳細內容。更多資訊請關注PHP中文網其他相關文章!