Skip to content

类型与配置模型

如果你在 TypeScript 项目里使用 samlesa,真正决定接入体验的除了 API,还有这些配置和返回类型本身。这一页按“类型做什么”来梳理,而不是机械罗列字段。

用于配置 ServiceProvider()

它负责定义:

  • SP 的实体标识
  • ACS / SLO / ARS 端点
  • 签名和加密证书
  • 私钥和签名算法
  • 安全开关
  • 请求模板和增强能力

最常见字段:

  • metadata
  • entityID
  • privateKey
  • signingCert
  • encryptCert
  • assertionConsumerService
  • singleLogoutService
  • artifactResolutionService
  • strictSecurity
  • allowLegacySha1
  • allowCertificateUsageMismatch
  • requestSignatureAlgorithm
  • dataEncryptionAlgorithm
  • keyEncryptionAlgorithm

用于配置 IdentityProvider()

它负责定义:

  • IdP 的实体标识
  • SSO / SLO / ARS 端点
  • 响应签名和断言加密行为
  • 私钥和证书
  • 请求 / 响应模板
  • 增强能力

最常见字段:

  • metadata
  • entityID
  • privateKey
  • signingCert
  • encryptCert
  • singleSignOnService
  • singleLogoutService
  • artifactResolutionService
  • strictSecurity
  • wantAuthnRequestsSigned
  • messageSigningOrder
  • isAssertionEncrypted

用于直接构建 SP metadata,而不一定要先实例化 ServiceProvider

适合:

  • 单独生成 metadata
  • 管理 metadata 输出
  • 在工具链里做 metadata 构建

用于直接构建 IdP metadata。

适合:

  • 单独生成或导出 IdP metadata
  • 不走完整高层实体流程的配置场景

虽然它在源码里是内部辅助类型,但你在配置时会直接按这个结构传值:

{
Binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
Location: 'https://sp.example.com/saml/acs',
isDefault: true
}

它的作用是描述:

  • 这个端点对应哪个 binding
  • 实际 URL 是什么
  • 是否是默认端点

这些类型主要用于 SP metadata 里的 AttributeConsumingService

  • ServiceName
  • RequestedAttribute
  • AttributeConsumingService
  • AttrService

表示一个带语言标签的名称:

{
value: 'Example Portal',
lang: 'en'
}

描述一个请求属性:

  • name
  • friendlyName
  • isRequired
  • nameFormat
  • attributeValue

把一组服务名、描述和请求属性组织在一起,用于 metadata 暴露“我希望 IdP 返回哪些属性”。

作用:增强 AuthnRequest

字段包括:

  • scoping
  • requestedAuthnContext
  • forceAuthn
  • isPassive
  • consent
  • attributeConsumingServiceIndex
  • providerName

作用:定义代理 SSO 相关的 Scoping 元素。

作用:定义认证上下文等级要求。

作用:增强断言 Conditions

字段包括:

  • oneTimeUse
  • proxyRestriction

作用:增强 SubjectConfirmationData 的时间、接收方和来源约束。

作用:把 OrganizationContactPerson 补进 metadata。

当前源码里暴露了这些模板类型:

  • LoginResponseTemplate
  • AttributeStatementTemplate
  • AttributeTemplate
  • LoginRequestTemplate
  • LogoutRequestTemplate
  • LogoutResponseTemplate

它们的作用是:

  • 给高层流程保留模板定制能力
  • 允许你在标准流程之上替换部分 XML 模板

如果你只是正常接入,通常不需要先改模板。

最基础的消息上下文,通常至少会有:

  • context
  • id

BindingContext 基础上增加:

  • entityEndpoint
  • type
  • relayState

PostBindingContext 基础上再增加:

  • sigAlg
  • signature
  • keyInfo

这些类型决定了不同 binding 的返回值长什么样。

用于 SamlLib.verifySignature()

主要字段:

  • metadata
  • keyFile
  • signatureAlgorithm
  • strictSecurity
  • allowLegacySha1
  • allowCertificateUsageMismatch

用于更细粒度地控制低层签名安全策略。

用于指定签名插入位置和前缀:

{
prefix: 'ds',
location: {
reference: "/*[local-name(.)='AuthnRequest']",
action: 'append'
}
}

如果你在业务项目里主要只是初始化 SP / IdP,很多时候靠推断就够了。
这些场景更适合显式导入类型:

  • 你在封装自己的 SAML 适配层
  • 你要共享一份强类型配置对象
  • 你在写测试夹具和协议级 helper
  • 你在给 metadata / 增强配置做复用