Configures SAML 2.0 identity federation between on-premises Active Directory (via AD FS) and Azure AD (Entra ID) for hybrid SSO and cloud app access. Useful for cross-domain authentication setups.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
身份联合(Identity Federation)使由一个身份提供商(IdP)认证的用户能够访问另一个身份提供商管理的资源,而无需维护独立的凭据。本技能涵盖在组织本地 Active Directory(通过 AD FS 或第三方 IdP)与 Microsoft Entra ID(原 Azure AD)之间建立 SAML 2.0 联合,以及为第三方 SaaS 应用配置联合 SSO。联合认证消除了密码同步的顾虑,将认证权限保留在本地,同时将 SSO 扩展到云资源。
Establishes SAML 2.0 identity federation between on-premises Active Directory (via AD FS) and Azure AD for cross-domain authentication and SSO to cloud apps. Useful for hybrid identity setups.
Establishes SAML 2.0 federation between on-premises Active Directory (AD FS) and Azure AD (Entra ID) for hybrid identity and SSO to cloud apps.
Configures SAML 2.0 SSO for Google Workspace with IdPs like Okta, Azure AD, ADFS. Enables centralized authentication, MFA enforcement, and org-wide access policies.
Share bugs, ideas, or general feedback.
身份联合(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