=== iamFeat.adoc Original: https://spaces.at.internet2.edu/x/fYFFBg

- - -

== *Suitability*

==== Enterprise: Employee

Management of  enterprise employees. Requires good RBAC, support for complex organizational  structures and entitlements, excellent provisioning capabilities, reasonable  reporting and governance

==== Enterprise: Customers

Management of enterprise customer identities. Requires  scalability and good provisioning capabilities. Organizational structure and  RBAC are much less important. Governance is usually only an obstacle here.

==== Cloud

Use  of IDM inside cloud service deployments, e.g. integrating applications in  SaaS clouds or directly exposing functionality as IDaaS. Requires  scalability. At least basic support for RBAC and organizational structure is  also required. Multi-tenancy is critical.

==== Public Sector

Management of identities in the public  sector. Usually a good support for organizational structures is required to  model organizational structure of public agencies, hierarchy of  regions/provinces for citizen identities, etc. Also reasonable support for  RBAC, good authorizations and at least a basic governance is required. Public  sector seems to be shifting to open source preference therefore a clean open  source strategy is also important.

==== Academia

Management of Identities in the in Higher  Education. Requires all types of  identities: teachers, students, employees, visitors, researchers, collaborators,  visitors etc., Usually support for very complex and parallel organizational  structures is required. Ability for a parameterized membership in many  organizational units is critical. As is the support for temporal conditions  to limit student and visitor access) Clean open source strategy is also  crucial.

- - -

== *Architecture*

==== Overall System Architecture

How good is the software architecture from  the software engineering point of view. Is the system well divided into  subsystems and components? Are there proper abstractions in place (such as  interfaces)? Is the structure of the system appropriate and understandable?

==== Platform

Platform on which the system runs.  E.G. specific operating system or hardware-independent platform

==== Structural Framework

Framework (or other method) which is  used to ‘wire’ the system together. Framework that binds the components  together and forms the basic structure of the system.

- - -

== *User Interface*

==== Framework
What is this? Programming framework that was used to build GUI. This is crucial as the framework is  very difficult to change. It usually means re-writing the entire GUI.

==== Usability

What is this?  How  easy is to use the system, how easy is to understand it. Is the system flooding user with information? Does it spread the information in a thousands of confusing tabs? Ergonomy, etc.

==== Completeness

What is this? Does  the user interface provide access to all functionality available in the  system?

==== Speed

What is this? How  quickly the GUI reacts to user actions.
CustomizationWhat is this? How  easily can be the GUI fuctionality be customized.

- - -

== *Role-Based Access Control (RBAC)*

==== Provisioning Roles
What is this? Ability  to specify which accounts to create when a role is assigned to a user.  Ability to define attribute values.

==== Hierarchical Roles

What is this? Ability  to include one role in another role.

==== Assignment parameters

What is this? Ability  to customize each role assignment with parameters. E.g. specify a tenant for  which the assigned role applies). The assignment parameters are not part of  role definition and neither they are part of user data. The parameters must  be part of user-role relation (assignment).

==== Parametric Roles

What is this? Use  parameters from user assignment or from a super role in the role expressions.  E.g. parametrize the assignment of role assistant with an organizational unit  or locality to which it applies.

==== Conditional Roles

What is this? Ability  to "switch on and off" each role based on an arbitrary condition.  Ability to assign temporal validity constraints (role valid from or to a  specific date).

==== Meta-roles

What is this? Roles  that can be applied to roles themselves. E.g. ability to sort roles to groups  or types (functional,business,IT,...) and specify the synchronization properties  for each group using a unified policy (meta-role).

==== Role ownership

What is this? Assign  a role owner who have more privileges over the role, e.g. ability to modify  role definition.

==== Role lifecycle

What is this? Ability  to guide the creation, modification and disposal of a role, e.g. using proper  authorizations, workflow, approvals, etc.

==== Role synchronization

What is this? Ability  to create groups (or other objects) in the target systems as a reflection of  a role. Also ability to create roles as a reflection of arbitrary resource  objects.

- - -

== *Organizational Structure*

==== Organizational Units

What is this? Ability  to support object that model organizational units such as companies,  divisions, departments, projects, workgroups, teams, ...

==== Organizational tree
What is this?  Ability  to organize organizational units to a tree-like structures, ability to  display them and efficiently browse them.

==== Parallel organizational structures

What is this? Ability  to maintain several independent organizational structures. E.g. maintain  functional organizational tree and a parallel flat project-oriented structure.  Ability to assign the same user to each of them independently.

==== Organizational structure synchronization

What is this? Ability  to create organizational units (or other objects) in the target systems as a  reflection of organizational structure. Also the other way around. Ability to  transform flat structures to tree structures, ability to reconstruct tree  structure from flat string attributes, etc.

- - -

== *Provisioning and Synchronization*

==== Propagation

What is this? Ability  to propagate data from the IDM system to the managed systems (resources).

Real-time synchronization

What is this? Ability  to synchronize data from managed systems to the IDM on an almost-real-time  basis (delay in seconds).

==== Reconciliation

What is this? Ability  to compare data records in IDM and in the managed systems.

==== Opportunistic synchronization

What is this? Ability  of the IDM system to automatically trigger synchronization when needed. E.g.  in case that an account is missing when IDM attempts to modify it, when  existing account is present when a new account is being created, etc.

==== Attribute mapping

What is this? Ability  to map attribute values between resource objects (object on managed systems)  and the objects in the IDM system.

==== Uniqueness, iteration

What is this? Ability  to enforce uniqueness of attribute values (on managed systems) and to  iteratively find a unique value, e.g. by trying identifiers in the form of  jack001, jack002, ...

==== Provisioning ordering and dependencies

What is this? Ability  to enforce proper ordering of provisioning operations. E.g. if an application  account depends on existence of operating system account. Also ability to  properly pass attribute values between systems. E.g. create e-mail account  first, pass the e-mail address value to user attribute, then create an AD  account and properly set the e-mail address.

==== Provisioning notifications

What is this? Notifications  that announce success or failure of provisioning operations. Used mostly to  deliver initial credentials and to notify system administrators about  problems. Support for various channels (e-mail, SMS, ...)

==== Resilience

What is this? Ability  of an IDM system to recover from provisioning failures such as timeouts and  retries, compensation mechanisms, transactional guarantees, etc.

==== Entitlements

What is this? Support  for management of entitlements on the resource side (in managed systems) such  as LDAP groups, AD groups, privileges, ACLs, etc. Ability to display and  synchronize them. Also ability to manage membership or association of  accounts and entitlements.

- - -

== *Connectors*

==== Framework

What is this? Framework  of mechanism used to manage and access provisioning connectors.
LDAPWhat is this? Support  for LDAP servers.

==== Active Directory

What is this? Support  for Microsoft Active Directory.

==== Databases

What is this? Support  for relational databases.

==== Generic connectors
What is this? Connectors  that can apply to many types of systems. Flat files, CSV, XML, scripting  connectors, etc.

==== Unix connectors

What is this? Connectors  for UNIX-like systems such as Linux, Solaris, BSD, AIX, ...

==== HR connectors

What is this? Connectors  for HR systems such as SAP HR modules, PeopleSoft HRMS, ...

==== ERP and business applications connectors

What is this? Connectors  for ERP systems and various 'business' systems such as SAP ERP (R/3), Oracle  applications, ...

==== Cloud connectors

What is this? Connectors  for cloud-based services such as SalesForce, Google apps, Office 365, ...

==== Mainframe and mini connectors

What is this? Connectors  for mainframe systems and 'minicomputers' such as z/OS, OS400, RACF, ...

==== Other connectors

==== Connector compatibility

What is this? Can  the connectors be used in other systems? Is there a support for legacy  connector frameworks?

==== Connector development

What is this? How  easy is to develop a new connector.

- - -

== *Customization*

==== Flexibility

What is this? Overall  flexibility of the product: ability to change its behavior to satisfy the  requirements.

==== Popular scripting languages

What is this? Support  for Groovy, JavaScript/ECMAscript or other popular scripting languages.

==== Other scripting

What is this? Support  for other scripting languages.

==== Extensible objects

What is this?  Ability  to extend existing object types with custom attributes. Ability to use the  custom attribute in the same way as built-in attributes. Also ability of the  attribute to be properly stored, indexed, displayed in forms, etc.

==== Generic objects

What is this? Ability  to define new object types beyond those that are provided by default. Also  ability for these new object types to behave as a first-class citizens.

==== Generic synchronization

What is this? Ability  to synchronize any object with any other object.

==== Hooks/triggers

What is this? Ability  to place custom code to be executed at important points in request  processing.

- - -

== *External interfaces (APIs)*

==== Local native API

What is this? Local  interface available in a primary language (e.g. Java). The goal is low  overhead (local calls) and efficient development (e.g. use of callbacks,  asynchronous invocation, etc.)

==== SOAP web service

What is this? Web  service exposed by SOAP endpoint, WSDL definition, XSD schema, WS-Security  support, etc.

==== REST

What is this? RESTful  resource-oriented interface with proper structure according to REST  architectural style (Fielding) and WWW architecture.

==== Client library

What is this? A  stand-alone component that can be linked to an application code and can be  used to conveniently access the IDM system over the network.

- - -

== *Data Storage*

==== Commercial relational databases

What is this? Ability  to store data in commercial relational databases such as Oracle, Microsoft  SQL Server, etc.

==== Opensource relational databases

What is this? Ability  to store data in open source relational databases such as PostgreSQL,  MariaDB, etc.

==== NoSQL

What is this? Ability  to store data in NoSQL databases.

- - -

== *Self-service*

==== Self registration

What is this? Ability  for anonymous user to fill out a registration form which creates a user  record. Also ability to control which fields are required, field validation,  CAPTCHA, etc.

==== Edit profile

What is this? A  dialog that allows user to change some of their own user profile details.  Also ability to control which fields are displayed, which fields are  editable, etc.

==== Password change

What is this? Ability  for a user to change his own password (when the user still knows the old  password). Also ability to select/filter resources, apply policies, etc.

==== Password reset

What is this? Ability  for a user to reset his own password when the old password is lost. Support  for verification mail, security questions, etc.

==== Account summary

What is this? Simple  page that provides easily understandable information about user's accounts,  entitlements, group membership, etc.

==== Password agents

What is this? Agents  that capture cleartext passwords and sent them to IDM for distribution. E.g.  agents for Active Directory, LDAP servers, etc.

Other self-service functionality

- - -

== *Security*

==== Authentication

What is this? Flexibility  of authentication mechanisms, integration with SSO systems, etc.

==== Authorization

What is this? Ability  to control who can do what. Overall authorization flexibility and  architecture.

==== Fine-grained authorization

What is this? Ability  to specify authorization policies on a fine granularity (e.g. on the  attribute level)

==== Delegated administration

What is this? Ability  to delegate administrative tasks to specific user groups. E.g. ability to  specify administrators for individual divisions, ability to delegate some  functions to he call center, etc.

==== Privilege delegation

What is this? Ability  to delegate privileges of one user to another user. E.g. allow one user to  take all the responsibilities of another user during a vacation.

==== Audit

What is this? Ability  to record all the operations of the users and the system down to a very fine  details.

- - -

== *Workflow*

==== Workflow engine integration

What is this? How  well is the workflow engine integrated into the system. Is it natural part of  the system or was it added just as an afterthought? Are the workflow action  items (such as approvals) reasonably integrated into the user interface?

==== Built-in approval workflow

What is this? Whether  the product contains built-in or default approval workflow and what are the  capabilities. Approval process is a usual part of IDM solutions and it is not  entirely trivial to implement.

==== Generic workflows

What is this? Can  the workflow be customized? Can any type of custom workflow be plugged into  the IDM processes?

==== Workflow standards

What is this? Does  the workflow support workflow standards (such as BPMN)?

==== Pluggable workflow engine

What is this? How  easily can the default workflow engine be replaced? Can the product use a  different engine? Or can it invoke remote workflow system instead?

- - -

== *Governance, risk assessment, compliance and forensic*

==== Segregation of duties

What is this? Ability  to exclude privileges or groups of privileges that cannot be assigned to the  same identity at the same time.

==== Recertification (attestation)

What is this? Support  for regular reviews and re-approvals of assigned privileges.

==== Role analysis

What is this? Support  for automated analysis of privileges aiming at assisted design of RBAC  structures. E.g. Role mining, role suggestions, etc.

==== Reporting

What is this? Support  for producing a well-formatted human-readable reports (e.g in HTML or PDF)  that contain information from the IDM system and/or the resources. Also  ability to easily configure custom report, modify the report design, etc.  (Simple data export from a database is NOT considered to be reporting)

==== History reports

What is this? Support  for storage of historical data and ability to analyze them. E.g. ability to  report who had a particular role 6 moths ago.

- - -

== *Operation*

==== Hardware resource efficiency

What is this? Systems  that consume a lot of CPU, RAM or overload disks will have a low score here.

==== Reliability

What is this? Whether  the system actually works, all the time, reliably, without strange bugs.

==== High availability

What is this? Ability  to work in clusters, geoclusters or other distributed configurations.

==== Export/import

What is this? Ability  to export all system data and import it to a different system. This is useful  for configuration management, migrations (dev->test->prod), backup and  restore, upgrades and variety of other reasons.

==== Bulk actions

What is this? Ability  to efficiently execute operations on a selected objects in a batch mode.

==== Logging

What is this? Ability  to control what information is logged, ability to log debug and tracing  information, whether the log messages are easy to understand, etc.

- - -

== *Documentation*

==== Architectural documentation

What is this? Documentation  of architecture, subsystems, components, dependencies, modules, UML diagrams,  ...

==== Administration documentation

What is this? Documentation  describing system configuration, administration and customization

==== Developer documentation

What is this? Documentation  describing how the system is implemented, how to create plug-ins and other  programming extensions, how to contribute to the project, etc.

- - -

== *Community*

==== Version control system


What is this? Where  is the source code maintained? Is the history public? What are the technical  obstacles to contribution?

==== Community support

What is this? Publicly  shared information, e.g. in mailing lists, wiki, bugtracking, knowledge base,  etc. Information that are only accessing for subscribers or behind a paywall  are NOT considered to be community support.

==== Roadmap

What is this? Is  project roadmap publicly available? Is product development planning  transparent and predictable? Can roadmap be influenced by the community?

==== Contributions

What is this? Is  the code a product of a closed team in a single company or is it a group  effort? How many independent groups or developers contribute to the project?  This is a crucial aspect because the companies behind open source projects  tend to be small and there is still a risk of failure. However if the project  has a broad community it is very likely that the product development will  continue even if the project founder fails.

==== Openness

What is this? How  much is the project open to the public? Is the product design and architecture discussed in public? The the planning done in public? Is everything done in a clean and transparent open source way?