skills/building-identity-federation-with-saml-azure-ad/SKILL.md
在本地部署的 Active Directory 与 Azure AD(Microsoft Entra ID)之间建立 SAML 2.0 身份联合(Identity Federation),实现无缝跨域认证和云应用 SSO。
npx skillsauth add killvxk/cybersecurity-skills-zh building-identity-federation-with-saml-azure-adInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
身份联合(Identity Federation)使由一个身份提供商(IdP)认证的用户能够访问另一个身份提供商管理的资源,而无需维护独立的凭据。本技能涵盖在组织本地 Active Directory(通过 AD FS 或第三方 IdP)与 Microsoft Entra ID(原 Azure AD)之间建立 SAML 2.0 联合,以及为第三方 SaaS 应用配置联合 SSO。联合认证消除了密码同步的顾虑,将认证权限保留在本地,同时将 SSO 扩展到云资源。
| 模型 | 认证权威 | 使用场景 | |-------|------------------------|----------| | 联合模式(AD FS) | 本地 AD FS | 监管要求认证保留在本地 | | 托管模式(PHS) | 带密码哈希同步的 Azure AD | 最简单的云认证,无需 AD FS | | 托管模式(PTA) | 通过直通代理的本地服务 | 云认证对照本地 AD 验证 | | 第三方联合 | 外部 IdP(Okta、Ping) | 多 IdP 环境 |
用户 → 云应用(SP)
│
└── 重定向至 Azure AD
│
├── Azure AD 检查联合域
│
└── 重定向至本地 AD FS
│
├── AD FS 对 Active Directory 进行认证
│
├── AD FS 签发 SAML 令牌
│
└── 令牌回传至 Azure AD
│
├── Azure AD 验证联合信任
│
├── Azure AD 签发自身令牌
│
└── 用户获取云应用访问令牌
| 组件 | 描述 | |-----------|-------------| | 令牌签名证书 | IdP 用于签名 SAML 断言的 X.509 证书 | | 联合元数据 | 描述 IdP 端点和功能的 XML 文档 | | 依赖方信任 | AD FS 中每个 SP(Azure AD)的配置 | | 声明规则 | 将 AD 属性转换为 SAML 声明 | | 签发者 URI | IdP 的唯一标识符(实体 ID) |
# 安装 AD FS 角色
Install-WindowsFeature ADFS-Federation -IncludeManagementTools
# 配置 AD FS 场
Install-AdfsFarm `
-CertificateThumbprint $certThumbprint `
-FederationServiceDisplayName "Corp Federation Service" `
-FederationServiceName "fs.corp.example.com" `
-ServiceAccountCredential $gmsaCredential
# 验证 AD FS 是否正常运行
Get-AdfsProperties | Select-Object HostName, Identifier, FederationPassiveAddress
# 安装 Microsoft Graph PowerShell 模块
Install-Module Microsoft.Graph -Scope CurrentUser
# 连接到 Microsoft Graph
Connect-MgGraph -Scopes "Domain.ReadWrite.All"
# 将托管域转换为联合域
# 使用 AD FS 联合元数据 URL
$domainId = "corp.example.com"
$federationConfig = @{
issuerUri = "http://fs.corp.example.com/adfs/services/trust"
metadataExchangeUri = "https://fs.corp.example.com/adfs/services/trust/mex"
passiveSignInUri = "https://fs.corp.example.com/adfs/ls/"
signOutUri = "https://fs.corp.example.com/adfs/ls/?wa=wsignout1.0"
signingCertificate = $base64Cert
preferredAuthenticationProtocol = "saml"
}
# 将联合设置应用到域
New-MgDomainFederationConfiguration -DomainId $domainId -BodyParameter $federationConfig
# 为 Azure AD 添加依赖方信任
Add-AdfsRelyingPartyTrust `
-Name "Microsoft Office 365 Identity Platform" `
-MetadataUrl "https://nexus.microsoftonline-p.com/federationmetadata/2007-06/federationmetadata.xml"
# 配置声明规则
$rules = @"
@RuleTemplate = "LdapClaims"
@RuleName = "Extract AD Attributes"
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",
Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory",
types = ("http://schemas.xmlsoap.org/claims/UPN",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname"),
query = ";userPrincipalName,mail,givenName,sn;{0}",
param = c.Value);
@RuleTemplate = "PassThroughClaims"
@RuleName = "Pass Through UPN as NameID"
c:[Type == "http://schemas.xmlsoap.org/claims/UPN"]
=> issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier",
Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer,
Value = c.Value,
ValueType = c.ValueType,
Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"]
= "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent");
"@
Set-AdfsRelyingPartyTrust `
-TargetName "Microsoft Office 365 Identity Platform" `
-IssuanceTransformRules $rules
对于每个通过 Azure AD 支持 SAML SSO 的 SaaS 应用:
AD FS 令牌签名证书会过期,必须进行续订:
# 检查当前证书到期时间
Get-AdfsCertificate -CertificateType Token-Signing | Select-Object Thumbprint, NotAfter
# AD FS 支持自动滚动更新(默认启用)
Get-AdfsProperties | Select-Object AutoCertificateRollover
# 若需要手动轮换:
# 1. 添加新证书作为次要证书
Set-AdfsCertificate -CertificateType Token-Signing -Thumbprint $newThumbprint -IsPrimary $false
# 2. 用新证书更新 Azure AD
# 3. 提升为主要证书
Set-AdfsCertificate -CertificateType Token-Signing -Thumbprint $newThumbprint -IsPrimary $true
# 4. 移除旧证书
Remove-AdfsCertificate -CertificateType Token-Signing -Thumbprint $oldThumbprint
testing
设计并执行社会工程学渗透测试,包括钓鱼、语音钓鱼、短信钓鱼和物理借口活动,以衡量人员安全韧性并识别培训差距。
testing
主持结构化的事件后审查,以识别根本原因、记录有效和无效的措施,并提出可操作的改进建议以提升未来的事件响应能力。
testing
通过分析举报的邮件、提取指标、评估凭据受攻陷情况、在全组织范围隔离恶意邮件并修复受影响账号来响应网络钓鱼事件。涵盖邮件头分析、URL/附件沙箱检测和邮箱范围清除操作。适用于网络钓鱼响应、邮件事件、凭据钓鱼、鱼叉式网络钓鱼调查或钓鱼修复相关请求。
tools
票据传递(Pass-the-Ticket,PtT)是一种横向移动技术,使用窃取的 Kerberos 票据(TGT 或 TGS)在不知道用户密码的情况下向服务进行认证。通过从已控制的主机内存中提取 Kerberos 票据,攻击者可以将这些票据注入自己的会话以模拟票据所有者。