首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何验证ADFS加密的SAML响应(断言)

基础概念

Active Directory Federation Services (ADFS) 是微软提供的一种身份联合服务,用于在不同安全域之间实现单点登录(SSO)。SAML(Security Assertion Markup Language)是一种基于XML的标准,用于在不同的安全域之间交换身份验证和授权数据。

验证ADFS加密的SAML响应(断言)

验证ADFS加密的SAML响应涉及以下几个步骤:

  1. 解密SAML断言:首先需要解密由ADFS加密的SAML断言。
  2. 验证签名:确保SAML断言未被篡改。
  3. 验证断言内容:检查断言中的信息是否有效和可信。

解密SAML断言

ADFS使用对称加密算法(如AES)来加密SAML断言。解密过程需要使用ADFS配置中的密钥。

代码语言:txt
复制
from lxml import etree
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import base64

def decrypt_saml_assertion(encrypted_assertion, key):
    # 解码Base64加密的断言
    encrypted_data = base64.b64decode(encrypted_assertion)
    
    # 解析加密数据
    iv = encrypted_data[:16]
    ciphertext = encrypted_data[16:]
    
    # 创建解密器
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    decryptor = cipher.decryptor()
    
    # 解密数据
    decrypted_data = decryptor.update(ciphertext) + decryptor.finalize()
    
    # 解析XML
    return etree.fromstring(decrypted_data)

验证签名

ADFS使用非对称加密算法(如RSA)来签名SAML断言。验证签名需要使用ADFS的公钥。

代码语言:txt
复制
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding

def verify_saml_signature(saml_assertion, adfs_public_key):
    # 解析SAML断言
    root = etree.fromstring(saml_assertion)
    
    # 获取签名节点
    signature_node = root.find('.//{http://www.w3.org/2000/09/xmldsig#}Signature')
    
    # 获取签名值和签名数据
    signed_info = signature_node.find('.//{http://www.w3.org/2000/09/xmldsig#}SignedInfo')
    signature_value = signature_node.find('.//{http://www.w3.org/2000/09/xmldsig#}SignatureValue').text
    
    # 序列化公钥
    public_key = serialization.load_pem_public_key(adfs_public_key, backend=default_backend())
    
    # 验证签名
    public_key.verify(
        base64.b64decode(signature_value),
        etree.tostring(signed_info),
        padding.PKCS1v15(),
        hashes.SHA256()
    )

验证断言内容

验证断言内容包括检查断言的发行者、受众、有效期等信息。

代码语言:txt
复制
def validate_saml_assertion(assertion, issuer, audience):
    # 检查发行者
    if assertion.issuer.text != issuer:
        raise ValueError("Invalid issuer")
    
    # 检查受众
    if audience not in assertion.conditions.attribute_statement:
        raise ValueError("Invalid audience")
    
    # 检查有效期
    if not assertion.conditions.not_on_or_after > datetime.utcnow():
        raise ValueError("Assertion has expired")

应用场景

验证ADFS加密的SAML响应通常用于企业内部或企业之间的单点登录(SSO)场景,确保用户身份的安全性和可信度。

常见问题及解决方法

  1. 密钥不匹配:确保使用的密钥与ADFS配置中的密钥一致。
  2. 签名验证失败:确保使用的公钥与ADFS配置中的公钥一致。
  3. 断言内容无效:检查断言中的发行者、受众和有效期等信息是否正确。

参考链接

通过以上步骤和方法,可以有效地验证ADFS加密的SAML响应,确保系统的安全性和可靠性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何将Spring Security 集成 SAML2 ADFS 实现SSO单点登录?

SAML 登录概念在学习之前,首先要了解SAML概念,SAML主要有三个身份:用户/浏览器,服务提供商,身份提供商“身份提供者”和“断言方”是同义词,在ADFS,OKta通常叫做IDP,而在Spring...IDP(Identity Provider)身份提供者 解释:IDP负责验证用户身份,并生成包含有关用户身份信息安全断言(assertion)。...RP(Relying Party)依赖方 SP 同义词 解释:RP是指依赖SAML断言来接受或拒绝用户访问请求实体。RP可以是SP同义词,表示它依赖IDP生成断言来进行用户授权。...我们先来看看SAML 2.0依赖方认证在Spring Security中是如何工作。首先,我们看到,像OAuth 2.0 登录一样,Spring Security 将用户带到第三方进行认证。...其中:entity-id 是身份提供者发出SAML响应 Issuer 属性所包含值,在adfs就是你唯一id,相当于依赖方 <EntityDescriptor EntityID="..."/

2.1K10

如何使用SAML配置CDSW身份验证

Faysongithub:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- 在前面Fayson介绍了《如何使用Shibboleth...搭建IDP服务并集成OpenLDAP》和《如何使用SAML配置Cloudera Manager身份验证》,通过ShibbolethIDP服务提供SAML认证服务,本篇文章主要介绍如何使用SAML配置...CDSW身份验证。...3.CDSW配置SAML ---- 1.使用管理员登录CDSW,点击“Admin” [bhfylkruul.jpeg] 2.点击“Admin”->“Security”,进入外部身份验证配置界面 SAML...] 点击登录跳转到如下界面 [ygufs13i4n.jpeg] 点击“Accept”,认证成功进入CDSW主页 [53jvylt5il.jpeg] 至此就完成了CDSWSAML身份验证配置。

4.4K90
  • 如何使用SAML配置Cloudera Manager身份验证

    Faysongithub:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- 在前面Fayson介绍了《如何使用Shibboleth...搭建IDP服务并集成OpenLDAP》,通过ShibbolethIDP服务提供SAML认证服务,本篇文章主要介绍如何使用SAML配置Cloudera Manager身份验证。...下图为CM集成SAML认证流程: [tvv4tv0pvm.jpeg] 内容概述 1.环境准备 2.CM配置SAML及注册IDP 3.登录验证 4.总结 测试环境 1.CM和CDH版本为5.13.1 2....---- 1.使用管理员登录CM,点击“管理”->“设置” [0lig7aonm9.jpeg] 2.进入设置页面选择“外部身份验证” [ngd5d3n68t.jpeg] 3.在搜索目录输入SAML,配置相应...身份验证配置。

    2.4K40

    gitlab集成AD域控登录

    本文将介绍如何在GitLab中集成AD域控登录。步骤:安装GitLab并启用AD域控认证首先,需要在GitLab服务器上安装GitLab,并启用AD域控认证。具体步骤如下:a....在安装过程中,需要设置GitLab管理员用户名和密码。b. 启用AD域控认证在GitLab配置文件中,可以设置AD域控认证参数。.../adfs/services/trust', 'idp_sso_target_url' => 'https://adfs.example.com/adfs/ls/', 'name_identifier_format...' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified', 'uid_attribute' => 'sAMAccountName...配置应用程序属性在应用程序属性中,需要设置一些参数,包括应用程序ID、回调地址、加密密钥等。c. 配置令牌签名证书在AD域控服务器上,需要生成一个令牌签名证书,并将其导出为PEM格式。

    9.2K40

    【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议运作机制和流程模式

    SAML请求SAML请求,也称为身份验证请求,由服务提供商生成以“请求”身份验证SAML响应SAML响应由身份提供者生成。它包含经过身份验证用户实际断言。...在该流程中,身份提供商发起SAML响应,该响应被重定向到服务提供商以断言用户身份,而不是由来自服务提供商重定向触发SAML流。需要注意几个关键事项服务提供商从不与身份提供商直接交互。...在收到SAML断言后,SP需要验证断言是否来自有效IdP,然后解析断言必要信息:用户名、属性等要执行此操作,SP至少需要以下各项:证书-SP需要从IdP获取公共证书以验证签名。...证书存储在SP端,并在SAML响应到达时使用。ACS Endpoint-断言消费者服务URL-通常简称为SP登录URL。这是由发布SAML响应SP提供终结点。SP需要将此信息提供给IdP。...根据应用程序体系结构,您需要考虑如何存储来自每个身份提供者SAML配置(例如,证书或IdP登录URL),以及如何为每个提供者提供必要SP信息。

    2.8K00

    可绕过身份验证,GitHub企业服务器曝满分漏洞,附PoC

    如果无法立即更新,考虑暂时禁用SAML认证或加密断言功能作为临时缓解措施。 GHES是一个自托管软件开发平台,允许组织使用Git版本控制存储和构建软件,并自动化部署流程。...该漏洞利用了GHES处理加密SAML声明方式中一个缺陷。攻击者可以创建一个包含正确用户信息SAML声明。...当GHES处理一个假SAML声明时,它将无法正确验证其签名,从而允许攻击者访问GHES实例。...GitHub进一步指出,默认情况下不启用加密断言,而且此漏洞不影响那些不使用SAML单一登录(SSO)或使用SAML SSO认证但没有加密断言实例。...加密断言允许网站管理员通过在认证过程中对SAML身份提供者(IdP)发送消息进行加密,来提高GHES实例安全性。

    9100

    陈希章(O365开发指南):干货分享-Office 365单点登录及应用集成解决方案

    而联合身份认证,则能适用于更加复杂业务场景,例如自定义登录界面和身份验证逻辑,尤其是您希望将用户数据存储在异构环境或者数据库中。...ADFS 方案具体配置 那么,这个方案到底是怎么实现呢?最简单架构,至少包含一台域控制器,一台ADFS服务器,一台ADFS Proxy服务器。...有关如何配置ADFS服务起来实现单点登录详细步骤,如有兴趣可以参考 https://aks.ms/adfsconfig 需要注意是,ADFS 不仅仅支持与AD进行同步,也支持将LDAP添加为Claims...,您希望最大化定制化用户登录体验,则可以按照WS-Federation 或者SAML 2.0协议规范开发第三方认证提供程序(IdP)然后将其与Office 365实现联合身份认证。...有关如何开发和配置IdP来单点登录,请参考 https://aka.ms/idpconfig 重点在最后 最后,希望这些分享对大家有所帮助。

    1.8K70

    看我如何发现影响20多个Uber子域名XSS漏洞

    在将身份断言发送给服务提供者之前,身份提供者也可能向委托人要求一些信息——例如用户名和密码,以验证委托人身份。SAML规范了三方之间断言,尤其是断言身份消息是由身份提供者传递给服务提供者。...在SAML中,一个身份提供者可能提供SAML断言给许多服务提供者。同样,一个服务提供者可以依赖并信任许多独立身份提供者断言。更多信息参考SAML说明。...值得注意是,uberinternal.com大多数子域名网站在身份验证阶段,都会跳转到uber.onelogin.com,而onelogin就是使用SAML验证一个Uber服务。...在此互动中,我感兴趣是用来接收uber.onelogin.com响应页面。...不过,最终我还是自己写了一个小工具 SAMLExtractor,可以用它来解码提取出跳转发生时,用来接收响应那个SAML consume URL。

    1.2K30

    开发中需要知道相关知识点:什么是 OAuth?

    OAuth 是作为对直接身份验证模式响应而创建。这种模式因 HTTP 基本身份验证而闻名,它会提示用户输入用户名和密码。...只要该信任关系适用于已签名断言,您就可以开始了。下图显示了这是如何工作。 联合身份因 SAML 2.0 而闻名,它是 2005 年 3 月 15 日发布 OASIS 标准。...这是一个很大规范,但主要两个组件是它身份验证请求协议(也称为 Web SSO)和它打包身份属性并对其进行签名方式,称为SAML 断言。...此流程允许授权服务器信任来自第三方(例如 SAML IdP)授权授予。授权服务器信任身份提供者。该断言用于从令牌端点获取访问令牌。...这对于投资 SAMLSAML 相关技术并允许他们与 OAuth 集成公司来说非常有用。因为 SAML 断言是短暂,所以此流程中没有刷新令牌,您必须在每次断言过期时继续检索访问令牌。

    27640

    OAuth 详解 什么是 OAuth?

    OAuth 是作为对直接身份验证模式响应而创建。这种模式因 HTTP 基本身份验证而闻名,它会提示用户输入用户名和密码。...只要该信任关系适用于已签名断言,您就可以开始了。下图显示了这是如何工作。 ? 联合身份因 SAML 2.0 而闻名,它是 2005 年 3 月 15 日发布 OASIS 标准。...这是一个很大规范,但主要两个组件是它身份验证请求协议(也称为 Web SSO)和它打包身份属性并对其进行签名方式,称为SAML 断言。...此流程允许授权服务器信任来自第三方(例如 SAML IdP)授权授予。授权服务器信任身份提供者。该断言用于从令牌端点获取访问令牌。...这对于投资 SAMLSAML 相关技术并允许他们与 OAuth 集成公司来说非常有用。因为 SAML 断言是短暂,所以此流程中没有刷新令牌,您必须在每次断言过期时继续检索访问令牌。

    4.5K20

    使用SAML配置身份认证

    如何在Cloudera Manager中使用SAML配置身份认证。...基于此断言,SP可以做出访问控制决定,换句话说,它可以决定是否为连接Principal执行某些服务。 SAML主要用例称为Web浏览器单点登录(SSO)。...该文件必须包含根据SAML元数据互操作性配置文件认证IDP使用签名/加密密钥所需公共证书。...• 用来标识Cloudera Manager实例实体ID • 如何SAML身份认证响应中传递用户ID: o 作为属性。如果是这样,则使用什么标识符。 o 作为NameID。...8) 在“ SAML签名/加密专用密钥别名”属性中,设置用于标识供Cloudera Manager使用专用密钥别名。 9) 在“ SAML签名/加密私钥密码”属性中,设置私钥密码。

    4K30

    IdentityServer Topics(5)- 使用第三方登录

    一些提供者使用专有协议(例如Facebook等社交提供者),一些使用标准协议, OpenID Connect,WS-Federation或SAML2p。...做一个决定你想如何处理这个用户。 如果这是一个新用户或一个返回用户,这可能会有所不同。 新用户在允许之前可能需要额外步骤和UI。 可能会创建一个链接到外部提供程序内部用户帐户。...许多协议(包括OpenID Connect)都允许将某种状态作为参数传递给请求,身份提供者将在响应中返回该状态。...ASP.NET Core提供OpenID Connect身份验证处理程序利用了该协议这一功能,这就是它如何实现上述returnUrl功能。...OpenID Connect身份验证处理程序的确提供了一个可扩展点,用于将状态存储在服务器中,而不是在请求URL中。

    2.9K30

    adfs是什么_培训与开发概念

    本文会首先介绍与联合身份验证有关概念及相关系统设计意图,随后会对 ADFS 联合身份验证配置过程、结构及处理流程进行阐述。...然后会基于已有的系统提出一个支持多 ADFS 联合身份验证改进实例,并对其结构及处理流程进行阐述。最后会对开发过程中所遭遇一些问题进行介绍。...常见联合身份验证实现有SAML、OAuth、OpenID等方式,本文主要介绍是基于Claims和SAML 2.0 AD FS 联合身份验证。...在AD FS中称谓 在SAML称谓 概念简述 Security Token 安全令牌 Assertion 声明 作为安全信息封装,用于描述一个用户信息,它在联合身份验证访问请求期间被创建。...2.3 扩展:如何支持多个AD域 如果我们项目只是针对公司内部成员使用,继承单个ADFS是足够,但是,当项目作为云端服务,针对用户群体可能是很多个企业级用户。

    1.5K20

    你喜欢样子我都有?!

    Zabbix 5.0新功能 目录 您可以选择:在本地或云端部署 基于SAML身份验证单点登录 安全可靠监控 机密信息更安全 可扩展性和性能 新一代agent官方支持 易于使用和管理监控 灵活监控您想要任何对象...Zabbix提供了一套开箱即用与行业标准云服务提供商集成: 基于SAML身份验证单点登录 SAML用于在安全身份提供者处提供单点身份验证,这意味着用户登录认证需要满足防火墙安全策略,然后SAML...SAML方式支持使Zabbix具备开箱即用与各种本地和云身份提供商(如Microsoft ADFS、OpenAM、Secureath、Okta、Auth0等)集成功能。...所有Zabbix组件都可配置密码,以避免在TLS连接中使用非安全密码 支持到MySQL和PostgreSQL后端加密连接 更强大SHA256用于保存用户密码Hash值 机密信息更安全 Zabbix...处理 不会将system.run[]日志记录在本地 将监控项键值大小从255个字符增加到2048个字符 能够刷新SNMP缓存、SNMPv3上下文更改 更快内部哈希函数运行 记录了如何对vmware.event

    1K20

    Keycloak vs MaxKey,开源单点登录框架如何选择?

    其核心是服务端返回 ticket 作为认证条件,由客户端判断条件是否存在,存在则通过验证接口验证用户登录状态,同时返回用户信息,否则进行登录。...SAML Security Assertion Markup Language,安全断言标记语言。一个基于 xml 在不同安全域间进行交换认证和授权数据协议,是很经典一个授权协议。...因此在大部分用户系统中,都会有 SAML 协议支持。不过国内使用还是偏少,OIDC 出现抢了它风头。...简介可以参考维基百科: 安全断言标记语言 Apereo CAS 官网:https://apereo.github.io/cas/6.4.x/index.html 这是老牌 SSO 系统,Java 语言开发...Support for delegated authentication to external providers such as ADFS, Facebook, Twitter, SAML2 IdPs

    5.1K51

    网站渗透测试安全检测登录认证分析

    ,来验证服务器 7.3.3....对可无端进行验证 服务器可以选择返回一个用session key加密之前是时间戳来完成双向验证 客户端通过解开消息,比较发回时间戳和自己发送时间戳是否一致,来验证服务器 SAML 7.4.1....简介 SAML (Security Assertion Markup Language) 译为安全断言标记语言,是一种xXML格式语言,使用XML格式交互,来完成SSO功能。...SAML,返回给Client Client提交SAML给SP SP读取SAML,确定请求合法,返回资源 7.4.3....源于ssl模式下认证可选性,可以删除签名方式标签绕过认证,如果SAML中缺少了expiration,并且断言ID不是唯一,那么就可能被重放攻击影响,越来越多网站安全问题日益出现,如果想要对网站或平台进行全面的安全检测以及渗透测试

    2.7K10
    领券