python3如何使用saml2.0協(xié)議接入SSO
python3使用saml2.0協(xié)議接入SSO
SAML(Security Assertion Markup Language)是一個 XML 框架,也就是一組協(xié)議,可以用來傳輸安全聲明。
比如,兩臺遠程機器之間要通訊,為了保證安全,我們可以采用加密等措施,也可以采用 SAML 來傳輸,傳輸的數據以 XML 形式,符合 SAML 規(guī)范,這樣我們就可以不要求兩臺機器采用什么樣的系統(tǒng),只要求能理解 SAML 規(guī)范即可。
其核心是: IDP和SP通過用戶的瀏覽器的重定向訪問來實現(xiàn)交換數據。
SP向IDP發(fā)出SAML身份認證請求消息,來請求IDP鑒別用戶身份;IDP向用戶索要用戶名和口令,并驗證其是否正確,如果驗證無誤,則向SP返回SAML身份認證應答,表示該用戶已經登錄成功了,此外應答中里還包括一些額外的信息,來卻確保應答被篡改和偽造。
本人在網上找了一張圖片,感覺比較好的說明了saml2.0的SSO認證的過程:
本人是python研發(fā)工程師,所以以python3為例,說明我是如何接入我們公司的SSO的。
本人使用的是python3-saml庫
1.準備所需要的json數據
req = { "idp": { "entityId": data["sso"]["login-url"], "singleSignOnService": { "url": data["sso"]["login-url"] }, "singleLogoutService": { "url": "{0}?service={1}".format( data["sso"]["logout-url"], url) } }, "sp": { "entityId": url, "singleSignOnService": { "url": data["sso"]["login-url"] }, "assertionConsumerService": { "url": url }, "singleLogoutService": { "url": "{0}?service={1}".format( data["sso"]["logout-url"], url) }, "NameIDFormat": "urn:oasis:names:tc:SAML:2.0:assertion" } }
將登錄認證服務器的請求地址寫到idp和sp的singleSignOnService,將登錄后跳轉的地址寫到sp的entityId和assertionConsumerService,將登出認證服務器的地址和登錄后要跳轉的地址寫到sp和idp的singleLogoutService
2.使用python3-saml庫
以django為例演示登錄
def login(request): one_login = OneLogin_Saml2_Settings(req) login = OneLogin_Saml2_Authn_Request(one_login) result = quote(login.get_request()) return HttpResponseRedirect(result)
之后跳轉至SSO的統(tǒng)一登錄界面,然后輸入用戶名和密碼進行驗證。
校驗通過后,登錄認證服務器會發(fā)送POST請求將用戶名等信息通過base64加密的方式傳給你,你解析做處理。
以django為例演示登出
def logout(reqeust): one_login = OneLogin_Saml2_Settings(req) logout_request = OneLogin_Saml2_Logout_Request(one_login) parameters = {'SAMLRequest': logout_request.get_request()} uri = logout_url + '?service={}'.format(domain + address) logout_url = OneLogin_Saml2_Utils.redirect(uri, parameters, True) return HttpResponseRedirect(logout_url)
之后跳回SSO統(tǒng)一登錄界面。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
VTK與Python實現(xiàn)機械臂三維模型可視化詳解
這篇文章主要介紹了VTK與Python實現(xiàn)機械臂三維模型可視化詳解,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12python 如何使用find和find_all爬蟲、找文本的實現(xiàn)
這篇文章主要介紹了python 如何使用find和find_all,爬蟲、找文本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10Python開發(fā)一個功能齊全的IM聊天工具(附實例代碼)
即時通訊(IM)工具現(xiàn)在已經很常見了,從簡單的文本聊天到文件傳輸、音視頻通話,IM 工具功能豐富,那么,本文使用Python開發(fā)一個基礎的IM聊天工具,包括:客戶端和服務端架構、實時消息發(fā)送與接收、多用戶聊天支持、一個簡單的圖形用戶界面(GUI)2024-12-12解決使用pip安裝報錯:Microsoft?Visual?C++?14.0?is?required.
對于程序員來說,經常pip安裝自己所需要的包,大部分的包基本都能安裝,但是總會遇到包安裝不了的問題,下面這篇文章主要給大家介紹了關于如何解決使用pip安裝報錯:Microsoft?Visual?C++?14.0?is?required.的相關資料,需要的朋友可以參考下2022-09-09