python3如何使用saml2.0协议接入SSO

 更新时间:2024年11月25日 09:12:20   作者:yangjiajia123456  
SAML是一种用于在不同系统之间传输安全声明的XML框架,通过IDP和SP之间的重定向访问,SP向IDP请求用户身份认证,IDP验证用户身份后返回SAML应答,本文以python3和python3-saml库为例,介绍了如何接入公司SSO系统,包括配置和处理登录和登出请求

python3使用saml2.0协议接入SSO

SAML(Security Assertion Markup Language)是一个 XML 框架,也就是一组协议,可以用来传输安全声明。

比如,两台远程机器之间要通讯,为了保证安全,我们可以采用加密等措施,也可以采用 SAML 来传输,传输的数据以 XML 形式,符合 SAML 规范,这样我们就可以不要求两台机器采用什么样的系统,只要求能理解 SAML 规范即可。

其核心是: IDP和SP通过用户的浏览器的重定向访问来实现交换数据。

SP向IDP发出SAML身份认证请求消息,来请求IDP鉴别用户身份;IDP向用户索要用户名和口令,并验证其是否正确,如果验证无误,则向SP返回SAML身份认证应答,表示该用户已经登录成功了,此外应答中里还包括一些额外的信息,来却确保应答被篡改和伪造。

本人在网上找了一张图片,感觉比较好的说明了saml2.0的SSO认证的过程:

本人是python研发工程师,所以以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的统一登录界面,然后输入用户名和密码进行验证。

校验通过后,登录认证服务器会发送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统一登录界面。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python四大模块文件管理介绍

    Python四大模块文件管理介绍

    我们可以使用python来操作文件,比如读取文件内容、写入新的内容等,本文主要介绍了Python IO文件管理的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • Python基础之import导入模块并调用其函数的完整指南

    Python基础之import导入模块并调用其函数的完整指南

    在Python编程中,import语句是实现模块化编程的核心工具之一,本文全面介绍了Python中import语句的使用方法和模块化编程的重要性,希望对大家有所帮助
    2026-06-06
  • python如何根据x轴、y轴坐标在坐标轴里画出曲线图

    python如何根据x轴、y轴坐标在坐标轴里画出曲线图

    这篇文章主要介绍了python如何根据x轴、y轴坐标在坐标轴里画出曲线图问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Python脚本实现下载合并SAE日志

    Python脚本实现下载合并SAE日志

    这篇文章主要介绍了Python脚本实现下载合并SAE日志,本文讲解了代码编写过程,然后给出了完整代码,需要的朋友可以参考下
    2015-02-02
  • python实现FTP服务器服务的方法

    python实现FTP服务器服务的方法

    本篇文章主要介绍了python实现FTP服务器的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • python交换两个变量的值方法

    python交换两个变量的值方法

    今天小编就为大家分享一篇python交换两个变量的值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 详解appium自动化测试工具(monitor、uiautomatorviewer)

    详解appium自动化测试工具(monitor、uiautomatorviewer)

    这篇文章主要介绍了详解appium自动化测试工具(monitor、uiautomatorviewer),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 如何利用PyQt5美化你的GUI界面

    如何利用PyQt5美化你的GUI界面

    python的脚本开发简单,有时候只需几行代码就能实现丰富的功能,而且python本身是跨平台的,所以深受程序员的喜爱,下面这篇文章主要给大家介绍了关于如何利用PyQt5美化你的GUI界面的相关资料,需要的朋友可以参考下
    2022-01-01
  • Vue中自定义指令的三个常用方法小结

    Vue中自定义指令的三个常用方法小结

    这篇文章主要为大家详细介绍了Vue中自定义指令的三个常用方法,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解一下
    2024-02-02
  • Python跨文件调用函数的五种实用方法

    Python跨文件调用函数的五种实用方法

    在开发Python项目时,90%的开发者都会遇到这样的困境:代码越写越长,功能越来越乱,最后变成难以维护的"意大利面条式代码",本文将手把手教你通过模块化编程,让代码结构清晰、可维护性强,并深入解析5种跨文件调用函数的实用方法,需要的朋友可以参考下
    2025-05-05

最新评论