Defining a Federated Account

What is a Federated Account and why is it important? In the context of Governance, Risk, and Compliance (GRC) and Security Operations (SecOps), ensuring seamless integration and coordination between different tools and systems is crucial. A federated JSON structure can serve as a standardized method to share user and group information across multiple applications, enabling efficient "baton passing" and maintaining consistent user management. Below, we present an argument for implementing such a structure, supported by the information from the provided documents.

Key Components of the Federated JSON Structure

  • Element ID and @id: These unique identifiers ensure that every user and account can be distinctly identified across different systems, preventing duplication and inconsistencies.
    • Core Metadata and Context: Including core metadata and context in the JSON structure provides essential details about each entity (user, account, organization), ensuring that all systems have access to the same foundational information.
    • Organization and Person Linkage: By linking users to organizations and persons through email addresses, systems can easily identify and manage affiliations, enhancing the coordination of user roles and responsibilities.
    • Account Membership and Groups: Defining account memberships with arrays of groups and initiatives allows for clear delineation of user roles within different contexts. This structure supports dynamic and flexible management of user permissions and responsibilities.
    • Active Subscription and Enablements: Including subscription information and enablements ensures that all systems are aware of the current status and capabilities of an account, enabling appropriate access and functionality.

Accounts

Accounts exist within Products and are unique entities created for groups of Users serving as the primary access point for utilizing the product’s services. Therefore, elementId, @id, coreMetaData, and context will always be present in Things.

PropertyExpected TypeDescription
elementIdStringA unique and persistent identifier for the record within the system's data set.
@idURLThe full unique link to the item so it's traversable by that property.
coreMetaDataObjectThe object representation of the Thing CoreMetaData.
usersArrayAn array of user.
contextContextThe JSON-LD context for the item in question.
organizationObjectThe object representation of the Thing Organization.
activeSubscriptionObjectThe object representation of the Thing ActiveSubscription.
accountMembershipObjectThe various memberships a User can belong to within an Account.
productObjectThe object representation of the Thing Product.

Users

Accounts contain an array of Users.

Organization

The first User that creates the Account sets the owning Organization.

Active Subscription

The subscription information tracks the Account’s begin and end dates, Live Status, and various enablements.

PropertyExpected TypeDescription
liveStatusStringA Boolean field of "live" (1::boolean) or "deprecated" (0::boolean).
beginDateDatetimeThe start date of an Initiative.
endDateDatetimeThe end date of an Initiative.
enablementsArrayAn array of enablement.

Enablements

Each Enablement will have a name and an optional description, as well as the enablement’s Live Status. Because enablements can change, an element ID should also be present.

PropertyExpected TypeDescription
nameStringThe name of the item or record.
liveStatusStringA Boolean field of "live" (1::boolean) or "deprecated" (0::boolean).
descriptionStringThis describes a Thing or Property.
elementIdStringA unique and persistent identifier for the record within the system's data set.

Account Membership

Account Membership contains an array of the Account groups and initiatives that exist within the account. Each Group and Initiative will contain the name and element ID of the Thing represented by the Object.

Account Group

The Account Group (as opposed to a Group which defines a type of organization) doesn’t need to contain much information – just the name, description, and possibly a contact email for the group (which is optional).

PropertyExpected TypeDescription
emailEmailPrimary Electronic Mail address.
nameStringThe name of the item or record.
descriptionStringThis describes a Thing or Property.
elementIdStringA unique and persistent identifier for the record within the system's data set.
@idURLThe full unique link to the item so it's traversable by that property.
coreMetaDataObjectThe object representation of the Thing CoreMetaData.
contextContextThe JSON-LD context for the item in question.

Account Initiative

Initiatives are slightly different than Groups in that initiatives normally have begin and end date.

PropertyExpected TypeDescription
emailEmailPrimary Electronic Mail address.
nameStringThe name of the item or record.
descriptionStringThis describes a Thing or Property.
elementIdStringA unique and persistent identifier for the record within the system's data set.
beginDateDatetimeThe start date of an Initiative.
endDateDatetimeThe end date of an Initiative.
@idURLThe full unique link to the item so it's traversable by that property.
coreMetaDataObjectThe object representation of the Thing CoreMetaData.
contextContextThe JSON-LD context for the item in question.

Product

This is simply the name of the product the Account is assigned to.