From http://lists.oasis-open.org/archives/security-services/200101/doc00003.doc; use this source for the official document.
ITML
Distributed Session Management Specification
Working
Draft
Control Number:
Version: 0.5
Editor(s):
David Orchard
David Tarrell
Gilbert Pilz
Copyright (C) Jamcracker,
Inc.
All Rights Reserved
Jamcracker, Inc. |
Relationship
to other standards
1.a.
Browser-based Single Sign-on to ecosystem
1.d.Traversal
to multiple partner sites
Session Management architecture
Session
Management interaction diagrams
ITML
Session Management Class Diagram
Important
Design notes (non-normative)
ITML - the Information Technology Markup Language - is a set of specifications of protocols, message formats and best practices in the ASP and ASP aggregation market to provide seamless integration of partners and business processes. It is based on open standards, particularly XML and HTTP. It also uses emerging standards, particularly SOAP and XML Schema.
This document provides a framework for specific interactions around session management to occur between Jamcracker and a partner. A typical use of this is for the synchronization of a single sign-on assertion. It addresses the needs of single sign-on, single sign-off, single time-out, and single maintain session.
This specification describes the following key decisions:
This document is a Working Draft, issued by the Jamcracker ITML team, for review by selected partners.
The ITML team
expects that significant changes will occur in this document before version 1.0
is released. The
ITML Team will not allow early implementation to constrain its ability to make
changes to this specification prior to final release.
The ITML Framework 1.0 has been influenced by many recent standards efforts including, but not limited to, the following:
XML:
SOAP:
XML Schema
ITML Messaging and Protocol
http://www.itml.org/Specifications/ITML Messaging And Protocol2000-11-22.doc
This document is a technical specification and is intended for developers and architects.
The following notations are used to present material in
this document:
ISSUE: An issue is a
direct request for feedback from the audience.
An issue reflects a lack of decision due to insufficient or conflicting
inputs. These are resolved through the
acquisition of more input
NOTE: Extra normative information that the author(s) wish to draw the attention of the reader to.
The following Use cases describe the interactions supported by this specification.
A primary assumption has been made:
1. “Users tend
to interact frequently within an ASP and infrequently interact across multiple
ASPs”.
This assumption allows the use of a conversation between Jamcracker and an partner when for purposes of timing out and logging out.
ASP – An application provided over the net and typically charged by the month. Note that there is no technical difference between an ASP and a web site. An ASP can provide a single or multiple business processes.
ASP Integration – A platform for Collaborative Business Processes, typically offering business processes that span ASPs.
JCE – Jamcracker Enterprise. The Jamcracker server platform.
UDK – Utility Development Kit. Software that Jamcracker provides ASP partners for ASP integration
The following diagram shows the deployment of the session management:
The session management interactions are shown below
The use of Single sign-on being transferred by session management should help.
A. Simple logon and hand-off
B. ASP Interaction
1. User accesses ASP1 again. There is no interaction between ASP and Jamcracker.
C. JC Timeout or Logout
D. ASP Timeout
E. ASP Logout
F. ASP1 to ASP2 hand-off
Notes:
From the users perspective, the logout and timeout happen as if there was no session management. When they press logout, the ASP controls the screen. The performance impact of refreshing master and slave sessions is not seen by any end-user.
The class diagram for ITML Session Management follows:
The session container has a collection of user Session Containers. Each Container can have many sub-elements. A prototypical usage is where a UserSessionContent is an S2ML document.
The assumption of lengthy interactions with a single ASP at a time allows the use of a Jamcracker centric polling model. Jamcracker pulls state changes from ASPs for the purposes of checking timeouts. ASPs push state changes when a logout occurs.
In total, there are 6 possible options for synchronization.
The key advantage of the Jamcracker pull approaches is that Jamcracker is not dependent upon the ASP for state management. If the ASP is down then Jamcracker will deal with the ASP being down, as opposed to not receiving an update. The key advantage for the “whenever” needed approach is that the session will be more timely – that is Jamcracker will pull the data when it needs so it will be current.
The downside of the Jamcracker pull approach is that there may be a significant performance hit when Jamcracker pulls the data from the ASP. This approach may also result in significantly increased traffic between JC and the ASP. There may be an interaction between JC and the ASP for every user on the JC ecosystem.
ASPs may push state to Jamcracker only when the session is being deleted from their system. Other updates to the state on their system are propagated only when JC pulls the data.
The time associated with each change to a session is a delta time, with time zero being the time of the last update from Jamcracker. This prevents the problem of systems having different values for the current time.
The changes propagated by the session management are the current value. The alternative is deltas or log of updates to the store. Thus add/delete/modify on various elements within the session are transmitted.
The entire session for a given user is always transmitted. It is anticipated that the data set will be fairly small (<5 Kilobytes) so optimization of transmitting subgraphs is not necessary
SessionIDs are assigned by Jamcracker. Jamcracker assures that the sessionIDs are unique across the space of ASPs it deals with.
Issues:
All Provisioning elements are associated with the sess namespace identifier, which is bound to the namespace URI http://www.itml.org/ns/2001/01/sessmgmt.
The session management specification consists of a number of commands and responses.
Jamcracker can issue the following requests to an ASP with parameters are provided:
An ASP can issue the following requests to Jamcracker
NOTE: There is no accepted standard for defining interfaces to XML/Web services, though WSDL appears to be gaining consensus. It is expected that this specification will evolve to any standard that emerges.
The following error conditions are defined in the sessmgmt error namespace:
The following show fragments of sample requests and response. These are not integrated with SOAP due to current authoring tool limitations on mixing namespaces.
<?xml
version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v3.5 NT
(http://www.xmlspy.com) by David Orchard (Jamcracker) -->
<!-- Instance of a fully formed
getSession -->
<sess:getSession xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xmlns="http://www.itml.org/ns/2001/01/sessmgmt" xsi:noNamespaceSchemaLocation="ITMLSessMethods.xsd" txid="abc:88:88:88:88">
<sess:UserIdentity>
<sess:UserID>dorchard</sess:UserID>
<sess:CompanyID>Partner1</sess:CompanyID>
</sess:UserIdentity>
</sess:getSession>
<?xml
version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v3.5 NT
(http://www.xmlspy.com) by David Orchard (Jamcracker) -->
<!-- Instance of a fully formed
getSessionResponse -->
<sess:getSessionResponse xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xmlns="http://www.itml.org/ns/2001/01/sessmgmt"
xsi:noNamespaceSchemaLocation="ITMLSessMethods.xsd"
txid="abc:88:88:88:88">
<sess:UserSessionContainer>
<lastUpdateTime>+05</lastUpdateTime>
<SessionIdentity>alargehardtoguessstring</SessionIdentity>
<s2ml:NameAssertion xmlns="http://www.s2ml.org">
<This>urn:authEngine32:xsde12</This>
<Issuer>http://www.jamcracker.com</Issuer>
<Date>2000-10—16T12:34:120-05:00</Date>
<Audiences>urn:jceecosystem</Audiences>
<AuthData>
<AuthType>Login</AuthType>
<IdentityToken>x12+21defqa$3#</IdentityToken>
</AuthData>
<dsig:signature>. . . </dsig:signature>
</s2ml:NameAssertion>
<bpi:bpdata xmlns="http://www.itml.org/ns/2001/05/bpi">
</bpi:bpdata>
</sess:UserSessionContainer>
</sess:getSessionResponse>
<?xml
version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v3.5 NT
(http://www.xmlspy.com) by David Orchard (Jamcracker) -->
<!-- Instance of a fully formed
getSessionResponse -->
<sess:getSessionResponse xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xmlns="http://www.itml.org/ns/2001/01/sessmgmt" xsi:noNamespaceSchemaLocation="ITMLSessMethods.xsd" txid="abc:88:88:88:88">
<sess:ITMLFaultDetail>
<sess:faultcode>InvalidUserID</sess:faultcode>
<sess:faultstring>C'est
une nomme invalide</sess:faultstring>
</sess:ITMLFaultDetail>
</sess:getSessionResponse>
<?xml version="1.0"
encoding="UTF-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
elementFormDefault="qualified">
<xsd:include
schemaLocation="ITMLSessStructs.xsd"/>
<xsd:element name="getSession">
<xsd:complexType>
<xsd:choice>
<xsd:element name="UserIdentity" type="UserIdentityType"/>
<xsd:element name="SessionIdentity" type="SessionIdentityType"/>
</xsd:choice>
<xsd:attribute name="txid" type="txidType"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="getSessionResponse">
<xsd:complexType>
<xsd:choice>
<xsd:sequence>
<xsd:element name="UserSessionContainer" type="UserSessionType"/>
</xsd:sequence>
<xsd:element name="ITMLFaultDetail" type="ITMLFaultDetailType"
minOccurs="0"/>
</xsd:choice>
<xsd:attribute name="txid" type="txidType"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="deleteSession">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="UserIdentity" type="UserIdentityType"/>
</xsd:sequence>
<xsd:attribute name="txid" type="txidType"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="deleteSessionResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ITMLFaultDetail" type="ITMLFaultDetailType"
minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="txid" type="txidType"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<?xml version="1.0"
encoding="UTF-8"?>
<!-- Edited
by David Orchard, Jamcracker -->
<xsd:schema
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
elementFormDefault="qualified">
<xsd:simpleType name="UserIDType">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="CompanyIDType">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="SessionIdentityType">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:complexType name="UserIdentityType">
<xsd:sequence>
<xsd:element name="UserID" type="UserIDType"/>
<xsd:element name="CompanyID" type="CompanyIDType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="UserSessionContainer">
<xsd:sequence>
<xsd:element name="LastUpdateTime" type="xsd:timeDuration"/>
<xsd:element name="SessionID" type="SessionIdentityType"/>
<xsd:element name="UserSession" type="UserSessionType"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="UserSessionType">
<xsd:sequence>
<xsd:any
namespace="##any"
processContents="lax"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ITMLFaultDetailType">
<xsd:sequence>
<xsd:element name="faultcode" type="faultcodeType"/>
<xsd:element name="faultstring" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="faultcodeType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="InvalidUserID"/>
<xsd:enumeration value="InvalidSessionID"/>
<xsd:enumeration value="InvalidCompanyID"/>
<xsd:enumeration value="InvalidSessionInfo"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="txidType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-z]{3}:[0-9]{2}:[0-9]{2}:[0-9]{2}:[0-9]{2}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
The specification has avoided any mention of error recovery or increased reliability. Typical examples of these are retrying the transaction, adopting a two-phase commit protocol, defining compensating transactions. Therefore it is likely that this will be a trouble spot for integration.
This specification has been greatly helped by the following people and affiliations:
2000:
Dec 8 Initial revision
Dec 12: Version 0.2, Added schema, added design notes, added messages
2001:
Jan 1: Version 0.3. Conch model – there can be only one! Active ASP at a time
Jan 15: Version 0.4. Conch model thrown out, cleaned up for publication.
Jan 30: Version 0.5. Cleaned up use cases, updated to latest XML Schema and wildcard