关于 building-identity-federation-with-saml-azure-ad
这是一项面向身份与云平台管理员的 SAML 联合身份配置技能,介绍本地 AD FS 或第三方 IdP 与 Microsoft Entra ID 的联邦,以及 SaaS 单点登录。内容还涉及声明规则、证书维护和端到端验证。
主要功能
- 01配置 AD FS 与 Entra ID 联邦
- 02设置 SaaS 应用 SAML SSO
- 03映射用户属性与声明
- 04管理签名证书生命周期
- 05验证联邦登录流程
适用场景
- 01将本地身份认证扩展到云资源
- 02为 SaaS 应用配置单点登录
- 03规划签名证书轮换与故障回退
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill building-identity-federation-with-saml-azure-ad安装后在 Claude Code 中输入/building-identity-federation-with-saml-azure-ad确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py详细介绍
使用 SAML Azure AD 构建身份联合
概述
身份联合使经一个身份提供程序认证的用户能够访问由另一个身份提供程序管理的资源,而无需维护单独的凭据。本技能涵盖在组织的本地 Active Directory(通过 AD FS 或第三方 IdP)与 Microsoft Entra ID(原 Azure AD)之间建立 SAML 2.0 联合,以及为第三方 SaaS 应用程序配置联合 SSO。联合消除了密码同步方面的顾虑,并将身份验证权威保留在本地,同时将 SSO 扩展到云资源。
何时使用
- 在您的环境中部署或配置使用 SAML Azure AD 构建身份联合功能时
- 在建立符合合规要求的安全控制措施时
- 在为此领域构建或改进安全架构时
- 在开展需要此实现的安全评估时
先决条件
- 本地 Active Directory 域
- AD FS 2019+ 或第三方 SAML IdP(Okta、Ping 等)
- Microsoft Entra ID 租户(建议使用 P1 或 P2 许可证)
- Azure AD Connect(如果使用混合身份并将密码哈希同步作为备份)
- 用于联合终结点的公共 TLS 证书
- 联合服务名称的 DNS 记录
核心概念
联合模型
| 模型 | 身份验证权威 | 使用场景 |
|---|---|---|
| 联合(AD FS) | 本地 AD FS | 法规要求将身份验证保留在本地 |
| 托管(PHS) | 使用密码哈希同步的 Azure AD | 最简单的云身份验证,无需 AD FS |
| 托管(PTA) | 通过直通代理在本地进行 | 针对本地 AD 验证云身份验证 |
| 第三方联合 | 外部 IdP(Okta、Ping) | 多 IdP 环境 |
SAML 联合架构
User → Cloud App (SP)
│
└── Redirect to Azure AD
│
├── Azure AD checks federated domain
│
└── Redirect to on-premises AD FS
│
├── AD FS authenticates against Active Directory
│
├── AD FS issues SAML token
│
└── Token posted back to Azure AD
│
├── Azure AD validates federation trust
│
├── Azure AD issues its own token
│
└── User receives access token for cloud app
联合信任组件
| 组件 | 描述 |
|---|---|
| 令牌签名证书 | IdP 用于签署 SAML 断言的 X.509 证书 |
| 联合元数据 | 描述 IdP 终结点和功能的 XML 文档 |
| 信赖方信任 | AD FS 中针对每个 SP(Azure AD)的配置 |
| 声明规则 | 将 AD 属性转换为 SAML 声明 |
| 颁发者 URI | IdP 的唯一标识符(实体 ID) |
工作流
步骤 1:准备 AD FS 基础结构
# Install AD FS role
Install-WindowsFeature ADFS-Federation -IncludeManagementTools
# Configure AD FS farm
Install-AdfsFarm `
-CertificateThumbprint $certThumbprint `
-FederationServiceDisplayName "Corp Federation Service" `
-FederationServiceName "fs.corp.example.com" `
-ServiceAccountCredential $gmsaCredential
# Verify AD FS is operational
Get-AdfsProperties | Select-Object HostName, Identifier, FederationPassiveAddress
步骤 2:配置 Azure AD 联合域
# Install Microsoft Graph PowerShell module
Install-Module Microsoft.Graph -Scope CurrentUser
# Connect to Microsoft Graph
Connect-MgGraph -Scopes "Domain.ReadWrite.All"
# Convert managed domain to federated
# Using AD FS federation metadata 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"
}
# Apply federation settings to domain
New-MgDomainFederationConfiguration -DomainId $domainId -BodyParameter $federationConfig
步骤 3:配置 AD FS 声明规则
# Add Relying Party Trust for Azure AD
Add-AdfsRelyingPartyTrust `
-Name "Microsoft Office 365 Identity Platform" `
-MetadataUrl "https://nexus.microsoftonline-p.com/federationmetadata/2007-06/federationmetadata.xml"
# Configure claim rules
$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
步骤 4:配置第三方 SaaS 联合
对于每个支持通过 Azure AD 进行 SAML SSO 的 SaaS 应用程序:
- 导航到 Microsoft Entra 管理中心 > 企业应用程序
- 从库中添加应用程序(或创建自定义 SAML)
- 配置单一登录 > SAML:
- 标识符(实体 ID):应用程序的实体 ID
- 回复 URL(ACS):应用程序的断言使用者服务 URL
- 登录 URL:应用程序的登录 URL
- 映射用户属性/声明:
- NameID:user.userprincipalname(电子邮件格式)
- 应用程序所需的附加声明
- 下载联合元数据 XML 或证书
- 使用 Azure AD 的联合详细信息配置 SaaS 应用
步骤 5:证书生命周期管理
AD FS 令牌签名证书会过期,必须续订:
# Check current certificate expiration
Get-AdfsCertificate -CertificateType Token-Signing | Select-Object Thumbprint, NotAfter
# AD FS supports auto-rollover (enabled by default)
Get-AdfsProperties | Select-Object AutoCertificateRollover
# If manual rotation is needed:
# 1. Add new certificate as secondary
Set-AdfsCertificate -CertificateType Token-Signing -Thumbprint $newThumbprint -IsPrimary $false
# 2. Update Azure AD with new certificate
# 3. Promote to primary
Set-AdfsCertificate -CertificateType Token-Signing -Thumbprint $newThumbprint -IsPrimary $true
# 4. Remove old certificate
Remove-AdfsCertificate -CertificateType Token-Signing -Thumbprint $oldThumbprint
验证清单
- AD FS 场可正常运行,且具有有效的 TLS 和令牌签名证书
- Azure AD 域已配置为联合身份验证,且元数据正确
- 声明规则已正确地将 AD 属性转换为 SAML 断言
- 测试用户能够端到端地通过联合身份验证流程进行身份验证
- 已在 AD FS 或 Azure AD 条件访问级别强制实施 MFA
- 已启用证书自动滚动更新,或已安排手动轮换
- 联合身份验证元数据终结点可公开访问
- 已配置智能锁定以防止暴力破解
- 已在 AD FS 上配置 Extranet 锁定策略
- 已配置监视,以监控 AD FS 运行状况和证书过期情况
- 灾难恢复:已记录托管身份验证回退方案
参考
评论
支持 Markdown