jam.saml.saml¶
saml
¶
Classes:
| Name | Description |
|---|---|
SAML |
Concrete SAML 2.0 implementation. |
SAML
¶
SAML(
*,
role: str = "sp",
private_key: str | None = None,
public_key: str | None = None,
certificate: str | None = None,
entity_id: str | None = None,
acs_url: str | None = None,
sso_url: str | None = None,
idp_public_key: str | None = None,
sp_public_key: str | None = None,
encryption_key: str | None = None,
default_exp: int = 300,
allowed_clock_skew: int = 120,
want_assertions_signed: bool = True,
id_store: dict | None = None,
replay_ttl: int = 300,
)
Bases: BaseSAML
Concrete SAML 2.0 implementation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
role
|
str
|
|
'sp'
|
private_key
|
str | None
|
PEM string or path to private key file. |
None
|
public_key
|
str | None
|
PEM string or path to public key / certificate. |
None
|
certificate
|
str | None
|
PEM cert string (included in metadata/KeyInfo). |
None
|
entity_id
|
str | None
|
Entity ID of this party. |
None
|
acs_url
|
str | None
|
ACS URL ( |
None
|
sso_url
|
str | None
|
SSO URL ( |
None
|
idp_public_key
|
str | None
|
IdP public key for signature verification ( |
None
|
sp_public_key
|
str | None
|
SP public key for signature verification ( |
None
|
encryption_key
|
str | None
|
SP public key PEM for assertion encryption ( |
None
|
default_exp
|
int
|
Default assertion lifetime in seconds. |
300
|
allowed_clock_skew
|
int
|
Clock skew tolerance in seconds (default 120). |
120
|
want_assertions_signed
|
bool
|
Require signed assertions ( |
True
|
id_store
|
dict | None
|
Dict for replay attack protection. Auto-created if None. |
None
|
replay_ttl
|
int
|
Seconds before a consumed ID is eligible for cleanup. |
300
|
Methods:
| Name | Description |
|---|---|
build_artifact |
Create a SAML 2.0 artifact from a message ID. |
build_artifact_resolve |
Build a signed SAML ArtifactResolve. |
build_artifact_response |
Build a signed SAML ArtifactResponse wrapping the original message. |
build_attribute_query |
Build a signed SAML AttributeQuery. |
build_attribute_query_response |
Build a SAML Response for an AttributeQuery (no AuthnStatement). |
build_logout_request |
Build a SAML LogoutRequest. |
build_logout_response |
Build a SAML LogoutResponse. |
build_manage_name_id_request |
Build a signed SAML ManageNameIDRequest. |
build_manage_name_id_response |
Build a signed SAML ManageNameIDResponse. |
build_response |
Build and sign a SAML Response with an Assertion. |
generate_metadata |
Generate SAML metadata XML. |
parse_artifact_resolve |
Parse an incoming SAML ArtifactResolve. |
parse_artifact_response |
Parse a SAML ArtifactResponse. |
parse_attribute_query |
Parse an incoming SAML AttributeQuery. |
parse_attribute_query_response |
Parse a SAML Response from an AttributeQuery. |
parse_authn_request |
Parse an incoming AuthnRequest from an SP. |
parse_logout_request |
Parse a SAML LogoutRequest. |
parse_logout_response |
Parse a SAML LogoutResponse. |
parse_manage_name_id_request |
Parse a SAML ManageNameIDRequest. |
parse_manage_name_id_response |
Parse a SAML ManageNameIDResponse. |
parse_metadata |
Parse SAML metadata XML into a SAMLMetadata object. |
parse_response |
Parse and validate a SAML Response from an IdP. |
prepare_authn_request |
Build AuthnRequest and return IdP redirect URL or POST form data. |
resolve_artifact |
Resolve a SAML artifact via SOAP/HTTP to the IdP resolve endpoint. |
build_artifact
¶
build_artifact(
source_message_id: str, *, issuer: str
) -> str
Create a SAML 2.0 artifact from a message ID.
2 bytes type code (0x0001) + 2 bytes endpoint index
- 40 random bytes → Base64.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
source_message_id
|
str
|
The ID of the referenced message (unused in artifact format, stored for reference). |
required |
issuer
|
str
|
Entity ID of the issuer (stored for reference). |
required |
Returns:
| Type | Description |
|---|---|
str
|
Base64-encoded artifact string. |
build_artifact_resolve
¶
build_artifact_resolve(
artifact: str,
*,
issuer: str,
destination: str,
**kwargs: Any,
) -> str
Build a signed SAML ArtifactResolve.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
artifact
|
str
|
The artifact to resolve. |
required |
issuer
|
str
|
SP entity ID. |
required |
destination
|
str
|
IdP artifact resolution service URL. |
required |
**kwargs
|
Any
|
binding ("post", "redirect", or "soap"). |
{}
|
Returns:
| Name | Type | Description |
|---|---|---|
POST |
str
|
Base64-encoded signed XML. |
Redirect |
str
|
Signed redirect URL. |
SOAP |
str
|
Raw XML. |
build_artifact_response
¶
build_artifact_response(
in_response_to: str,
original_message_xml: str,
*,
issuer: str,
destination: str,
**kwargs: Any,
) -> str
Build a signed SAML ArtifactResponse wrapping the original message.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
in_response_to
|
str
|
ArtifactResolve ID. |
required |
original_message_xml
|
str
|
The original SAML message XML to embed. |
required |
issuer
|
str
|
IdP entity ID. |
required |
destination
|
str
|
SP endpoint URL. |
required |
**kwargs
|
Any
|
binding, status_code. |
{}
|
Returns:
| Name | Type | Description |
|---|---|---|
POST |
str
|
Base64-encoded signed XML. |
Redirect |
str
|
Signed redirect URL. |
SOAP |
str
|
Raw XML. |
build_attribute_query
¶
build_attribute_query(
subject: str,
*,
issuer: str,
destination: str,
attribute_names: list[str] | None = None,
binding: str = "post",
**kwargs: Any,
) -> str
Build a signed SAML AttributeQuery.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
subject
|
str
|
Subject to query attributes for. |
required |
issuer
|
str
|
SP entity ID. |
required |
destination
|
str
|
IdP attribute query endpoint URL. |
required |
attribute_names
|
list[str] | None
|
Specific attributes to request (None = all). |
None
|
binding
|
str
|
|
'post'
|
**kwargs
|
Any
|
relay_state, name_id_format. |
{}
|
Returns:
| Name | Type | Description |
|---|---|---|
POST |
str
|
Base64-encoded signed XML. |
Redirect |
str
|
Signed redirect URL. |
build_attribute_query_response
¶
build_attribute_query_response(
in_response_to: str,
subject: str,
attributes: dict[str, Any],
*,
issuer: str,
audience: str,
**kwargs: Any,
) -> str
Build a SAML Response for an AttributeQuery (no AuthnStatement).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
in_response_to
|
str
|
AttributeQuery ID. |
required |
subject
|
str
|
The subject. |
required |
attributes
|
dict[str, Any]
|
User attributes dict. |
required |
issuer
|
str
|
IdP entity ID. |
required |
audience
|
str
|
SP entity ID. |
required |
**kwargs
|
Any
|
destination, name_id_format. |
{}
|
Returns:
| Type | Description |
|---|---|
str
|
Signed SAML Response XML string. |
build_logout_request
¶
build_logout_request(
name_id: str,
*,
issuer: str,
destination: str,
session_index: str | None = None,
**kwargs: Any,
) -> str
Build a SAML LogoutRequest.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name_id
|
str
|
User identifier to log out. |
required |
issuer
|
str
|
Entity ID of the sender. |
required |
destination
|
str
|
SLO endpoint of the recipient. |
required |
session_index
|
str | None
|
Session index (optional). |
None
|
**kwargs
|
Any
|
binding, relay_state, name_id_format. |
{}
|
Returns:
| Name | Type | Description |
|---|---|---|
POST |
str
|
Base64-encoded signed XML. |
Redirect |
str
|
Signed redirect URL. |
build_logout_response
¶
build_logout_response(
in_response_to: str,
*,
issuer: str,
destination: str,
status_code: str = STATUS_SUCCESS,
**kwargs: Any,
) -> str
Build a SAML LogoutResponse.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
in_response_to
|
str
|
LogoutRequest ID to respond to. |
required |
issuer
|
str
|
Entity ID of the sender. |
required |
destination
|
str
|
SLO endpoint of the recipient. |
required |
status_code
|
str
|
SAML status code. |
STATUS_SUCCESS
|
**kwargs
|
Any
|
binding, relay_state. |
{}
|
Returns:
| Name | Type | Description |
|---|---|---|
POST |
str
|
Base64-encoded signed XML. |
Redirect |
str
|
Signed redirect URL. |
build_manage_name_id_request
¶
build_manage_name_id_request(
name_id: str,
*,
issuer: str,
destination: str,
new_id: str | None = None,
binding: str = "post",
**kwargs: Any,
) -> str
Build a signed SAML ManageNameIDRequest.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name_id
|
str
|
Current NameID. |
required |
issuer
|
str
|
Entity ID of the requester. |
required |
destination
|
str
|
Recipient endpoint URL. |
required |
new_id
|
str | None
|
New identifier (None = terminate). |
None
|
binding
|
str
|
|
'post'
|
**kwargs
|
Any
|
relay_state, name_id_format. |
{}
|
Returns:
| Name | Type | Description |
|---|---|---|
POST |
str
|
Base64-encoded signed XML. |
Redirect |
str
|
Signed redirect URL. |
build_manage_name_id_response
¶
build_manage_name_id_response(
in_response_to: str,
*,
issuer: str,
destination: str,
status_code: str = STATUS_SUCCESS,
**kwargs: Any,
) -> str
Build a signed SAML ManageNameIDResponse.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
in_response_to
|
str
|
ManageNameIDRequest ID. |
required |
issuer
|
str
|
Entity ID of the responder. |
required |
destination
|
str
|
Endpoint URL of the requester. |
required |
status_code
|
str
|
SAML status code (default Success). |
STATUS_SUCCESS
|
**kwargs
|
Any
|
binding, relay_state. |
{}
|
Returns:
| Name | Type | Description |
|---|---|---|
POST |
str
|
Base64-encoded signed XML. |
Redirect |
str
|
Signed redirect URL. |
build_response
¶
build_response(
subject: str,
attributes: dict[str, Any],
*,
issuer: str,
audience: str,
**kwargs: Any,
) -> str
Build and sign a SAML Response with an Assertion.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
subject
|
str
|
Authenticated user identifier. |
required |
attributes
|
dict[str, Any]
|
User attributes dict. |
required |
issuer
|
str
|
IdP entity ID. |
required |
audience
|
str
|
SP entity ID. |
required |
**kwargs
|
Any
|
in_response_to, name_id_format, session_index, destination, encrypt (bool, default False). |
{}
|
Returns:
| Type | Description |
|---|---|
str
|
Signed (and optionally encrypted) SAML Response XML string. |
generate_metadata
¶
generate_metadata(
*,
entity_id: str | None = None,
sso_url: str | None = None,
acs_url: str | None = None,
role: str | None = None,
) -> str
Generate SAML metadata XML.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
entity_id
|
str | None
|
Entity ID (defaults to instance entity_id). |
None
|
sso_url
|
str | None
|
SSO URL (IdP metadata). |
None
|
acs_url
|
str | None
|
ACS URL (SP metadata). |
None
|
role
|
str | None
|
|
None
|
Returns:
| Type | Description |
|---|---|
str
|
Metadata XML string. |
parse_artifact_resolve
¶
parse_artifact_resolve(
saml_request: str,
*,
binding: str = "post",
**kwargs: Any,
) -> SAMLArtifactResolve
Parse an incoming SAML ArtifactResolve.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
saml_request
|
str
|
Raw ArtifactResolve data. |
required |
binding
|
str
|
|
'post'
|
**kwargs
|
Any
|
issuer (expected issuer). |
{}
|
Returns:
| Type | Description |
|---|---|
SAMLArtifactResolve
|
Parsed SAMLArtifactResolve. |
parse_artifact_response
¶
parse_artifact_response(
saml_response: str,
*,
binding: str = "post",
**kwargs: Any,
) -> SAMLArtifactResponse
Parse a SAML ArtifactResponse.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
saml_response
|
str
|
Raw ArtifactResponse data. |
required |
binding
|
str
|
|
'post'
|
**kwargs
|
Any
|
issuer (expected issuer). |
{}
|
Returns:
| Type | Description |
|---|---|
SAMLArtifactResponse
|
Parsed SAMLArtifactResponse. |
parse_attribute_query
¶
parse_attribute_query(
saml_request: str,
*,
binding: str = "redirect",
**kwargs: Any,
) -> SAMLAttributeQuery
Parse an incoming SAML AttributeQuery.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
saml_request
|
str
|
Raw AttributeQuery data. |
required |
binding
|
str
|
|
'redirect'
|
**kwargs
|
Any
|
issuer (expected issuer). |
{}
|
Returns:
| Type | Description |
|---|---|
SAMLAttributeQuery
|
Parsed SAMLAttributeQuery. |
parse_attribute_query_response
¶
parse_attribute_query_response(
saml_response: str,
*,
binding: str = "post",
**kwargs: Any,
) -> SAMLResponse
Parse a SAML Response from an AttributeQuery.
Delegates to parse_response.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
saml_response
|
str
|
Raw SAMLResponse data. |
required |
binding
|
str
|
|
'post'
|
**kwargs
|
Any
|
audience, issuer, etc. |
{}
|
Returns:
| Type | Description |
|---|---|
SAMLResponse
|
Parsed SAMLResponse. |
parse_authn_request
¶
parse_authn_request(
saml_request: str,
*,
binding: str = "redirect",
**kwargs: Any,
) -> SAMLRequest
Parse an incoming AuthnRequest from an SP.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
saml_request
|
str
|
Raw SAMLRequest data. |
required |
binding
|
str
|
|
'redirect'
|
**kwargs
|
Any
|
issuer (expected issuer for validation). |
{}
|
Returns:
| Type | Description |
|---|---|
SAMLRequest
|
Parsed SAMLRequest. |
parse_logout_request
¶
parse_logout_request(
saml_request: str,
*,
binding: str = "redirect",
**kwargs: Any,
) -> SAMLLogoutRequest
Parse a SAML LogoutRequest.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
saml_request
|
str
|
Raw LogoutRequest data. |
required |
binding
|
str
|
|
'redirect'
|
**kwargs
|
Any
|
issuer, public_key (override verification key). |
{}
|
Returns:
| Type | Description |
|---|---|
SAMLLogoutRequest
|
Parsed SAMLLogoutRequest. |
parse_logout_response
¶
parse_logout_response(
saml_response: str,
*,
binding: str = "redirect",
**kwargs: Any,
) -> SAMLLogoutResponse
Parse a SAML LogoutResponse.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
saml_response
|
str
|
Raw LogoutResponse data. |
required |
binding
|
str
|
|
'redirect'
|
**kwargs
|
Any
|
issuer, public_key (override verification key). |
{}
|
Returns:
| Type | Description |
|---|---|
SAMLLogoutResponse
|
Parsed SAMLLogoutResponse. |
parse_manage_name_id_request
¶
parse_manage_name_id_request(
saml_request: str,
*,
binding: str = "redirect",
**kwargs: Any,
) -> SAMLManageNameIDRequest
Parse a SAML ManageNameIDRequest.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
saml_request
|
str
|
Raw ManageNameIDRequest data. |
required |
binding
|
str
|
|
'redirect'
|
**kwargs
|
Any
|
issuer (expected issuer). |
{}
|
Returns:
| Type | Description |
|---|---|
SAMLManageNameIDRequest
|
Parsed SAMLManageNameIDRequest. |
parse_manage_name_id_response
¶
parse_manage_name_id_response(
saml_response: str,
*,
binding: str = "redirect",
**kwargs: Any,
) -> SAMLManageNameIDResponse
Parse a SAML ManageNameIDResponse.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
saml_response
|
str
|
Raw ManageNameIDResponse data. |
required |
binding
|
str
|
|
'redirect'
|
**kwargs
|
Any
|
issuer (expected issuer). |
{}
|
Returns:
| Type | Description |
|---|---|
SAMLManageNameIDResponse
|
Parsed SAMLManageNameIDResponse. |
parse_metadata
¶
parse_metadata(metadata_xml: str) -> SAMLMetadata
Parse SAML metadata XML into a SAMLMetadata object.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
metadata_xml
|
str
|
Raw metadata XML string. |
required |
Returns:
| Type | Description |
|---|---|
SAMLMetadata
|
SAMLMetadata with entity_id, endpoints, cert, etc. |
parse_response
¶
parse_response(
saml_response: str,
*,
binding: str = "post",
**kwargs: Any,
) -> SAMLResponse
Parse and validate a SAML Response from an IdP.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
saml_response
|
str
|
Raw SAMLResponse (Base64 POST or query-string). |
required |
binding
|
str
|
|
'post'
|
**kwargs
|
Any
|
audience, issuer, verify_signature. |
{}
|
Returns:
| Type | Description |
|---|---|
SAMLResponse
|
SAMLResponse with parsed assertion data. |
prepare_authn_request
¶
prepare_authn_request(
idp_sso_url: str,
*,
acs_url: str | None = None,
binding: str = "redirect",
**kwargs: Any,
) -> str
Build AuthnRequest and return IdP redirect URL or POST form data.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
idp_sso_url
|
str
|
IdP SSO endpoint URL. |
required |
acs_url
|
str | None
|
SP ACS URL. |
None
|
binding
|
str
|
|
'redirect'
|
**kwargs
|
Any
|
relay_state, issuer, etc. |
{}
|
Returns:
| Type | Description |
|---|---|
str
|
Redirect URL ( |
resolve_artifact
¶
resolve_artifact(
artifact: str,
*,
issuer: str,
resolve_url: str,
**kwargs: Any,
) -> str
Resolve a SAML artifact via SOAP/HTTP to the IdP resolve endpoint.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
artifact
|
str
|
The artifact to resolve. |
required |
issuer
|
str
|
SP entity ID. |
required |
resolve_url
|
str
|
IdP artifact resolution service URL. |
required |
**kwargs
|
Any
|
timeout (int, default 10), expected_issuer (IdP entity ID to validate the ArtifactResponse issuer). |
{}
|
Returns:
| Type | Description |
|---|---|
str
|
The original SAML message XML from the ArtifactResponse. |