The session drop issue you’re experiencing is caused by a mismatch between SAML assertion lifetime, IdP session lifetime, and Teamcenter session persistence. Here’s how to properly configure each component:
1. SAML Assertion Lifetime Configuration
Your IdP is issuing SAML assertions with a 30-minute validity period (NotOnOrAfter attribute). This is independent of the IdP session timeout. To extend assertion lifetime:
In your IdP configuration (example for Shibboleth):
<bean id="shibboleth.DefaultAssertionLifetime"
class="java.lang.Long">
<constructor-arg value="14400000" /> <!-- 4 hours in milliseconds -->
</bean>
For other IdPs:
- Okta: Admin Console → Applications → Teamcenter → Sign On → Advanced Settings → Assertion Lifetime = 240 minutes
- Azure AD: Enterprise Applications → Teamcenter → Single Sign-On → SAML Token Lifetime = 240 minutes
- ADFS: Relying Party Trust → Edit Claim Rules → Issuance Transform Rules → Modify assertion lifetime
However, extending assertion lifetime beyond 2 hours raises security concerns. A compromised assertion remains valid for the entire period.
2. IdP Session Configuration and Refresh
The better approach is implementing silent assertion refresh. Configure your IdP to support passive authentication requests:
IdP configuration for passive refresh:
<bean id="shibboleth.PassiveAuthenticationSupported"
class="java.lang.Boolean">
<constructor-arg value="true" />
</bean>
This allows Teamcenter to request new assertions without user interaction.
3. Session Persistence in Teamcenter
Configure Teamcenter to implement assertion refresh before expiry. Update your SAML authentication configuration:
In tc_profilevars.sh or site.xconf:
export SAML_ASSERTION_REFRESH_ENABLED=true
export SAML_ASSERTION_REFRESH_THRESHOLD=300 # Refresh 5 min before expiry
export TC_SESSION_TIMEOUT=28800 # 8 hours
export TC_SESSION_PERSISTENCE_ENABLED=true
Configure the SAML authentication filter to trigger refresh:
wt.auth.saml.assertionRefresh.enabled=true
wt.auth.saml.assertionRefresh.threshold=300
wt.auth.saml.assertionRefresh.method=passive
wt.auth.saml.sessionPersistence.enabled=true
wt.auth.saml.sessionPersistence.timeout=28800
Asset Lifecycle Specific Configuration:
Asset lifecycle operations require special handling because they maintain transactional state:
wt.lifecycle.session.preserveOnAuthRefresh=true
wt.lifecycle.transaction.timeout=14400
wt.lifecycle.session.assertionValidation=relaxed
The relaxed validation mode allows the lifecycle session to continue even if assertion refresh temporarily fails, preventing data loss during network hiccups.
Implementation Strategy:
- Short-term fix (immediate relief): Extend assertion lifetime to 2 hours at IdP
- Medium-term (within 2 weeks): Implement silent assertion refresh in Teamcenter
- Long-term (best practice): Configure session persistence with automatic refresh
Silent Refresh Implementation:
Add a JavaScript module to the asset lifecycle UI that monitors assertion expiry:
// Pseudocode - Key implementation steps:
1. Parse SAML assertion from session cookie
2. Extract NotOnOrAfter timestamp
3. Calculate time remaining until expiry
4. If < 5 minutes, trigger passive authentication:
- Create hidden iframe
- Set src to IdP passive auth endpoint
- Include IsPassive=true parameter
5. On successful refresh, update session with new assertion
6. On failure, show warning dialog before logout
Validation and Testing:
- Monitor SAML assertions in browser developer tools
- Verify assertion refresh occurs before expiry
- Test with long-running asset lifecycle operations (2+ hours)
- Check Teamcenter logs for assertion validation messages
- Verify no session drops during active work
Security Considerations:
- Longer assertion lifetime = larger attack window if compromised
- Silent refresh requires passive authentication support at IdP
- Session persistence must be protected with secure cookies
- Consider implementing re-authentication for sensitive operations even with valid sessions
Monitoring:
Implement logging to track assertion refresh events:
wt.auth.saml.logging.assertionRefresh=INFO
wt.auth.saml.logging.sessionPersistence=INFO
This logs all refresh attempts, successes, and failures, helping you identify any ongoing issues.
After implementing these configurations, users should be able to work on asset lifecycle tasks for the full session timeout period (8 hours) without interruption. The combination of reasonable assertion lifetime (2 hours), silent refresh (before expiry), and session persistence (beyond assertion lifetime) provides both security and usability. Test thoroughly with actual asset lifecycle workflows before deploying to production.
This draft is based on general Teamcenter knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.