This pattern permits members of a federation participate in a circle of trust. It allows assigning roles to users / services of their organisation in the context of a B2B collaboration. It provides a mechanism to dynamically bootstrap or exclude participants of the collaboration (i.e. group members), and to accordingly update security context of the group on-the-fly.
In a typical cross-enterprise collaborative scenario, performing an activity requires participants (users, services, resources) to be provided by different enterprises. A demand for including new participants will appear during the collaboration lifetime, and the existing participants may be dropped.
At the same time, security of the collaboration needs to be maintained: members of a federation must be able to identify one another, identify messages as coming from other members of the federation, and identify the truth of claims made by other parties in the federation.
It is appropriate to apply this pattern:
When interacting entities are exposed via Web Services interfaces and can understand WS-Trust and WS-Coordination standards.
For establishing on-the-fly mechanism to dynamically bootstrap or exclude participants of the collaboration.
The architectural model assumed in the pattern is depicted in the next Figure - Secure Federation.
The initial assumption is that every entity in the model already owns a key pair and an identity token provided by the environment (i.e. a trust realm) they reside in. A token contains owners ID, public key, etc. These tokens can be attached to every message when authenticating a requester at the destination is required.
As an example, an identity token owned by web service 1 is:
Tws1 = (WS1_ID, Puws1,
) signPrsts
,where WS1_ID is the identifier of the service1.
The Security Token Service (STS) that signs and issues these identity tokens may be different from the one which is subsequently involved in the creation of the security context. With that respect, the assumption is that there is a predefined relationship between the coordination service and the STS responsible for creating the key-pair for the group and the group token. This token is signed by a private key of that STS, and contains at least the groupID, an identifier of the service and the group public key: Tgws1 = {GroupID, IDws1, Pug, }/signPrsts
This basic participants in the pattern are: