[midPoint] Use in higher education?
Radovan Semancik
radovan.semancik at evolveum.com
Mon Feb 22 11:14:03 CET 2016
Hello
On 02/18/2016 11:15 PM, Richard Frovarp wrote:
> My question is how much of my need can be met by midPoint? I
> understand that it is a provisioning engine, which is what I'm after.
> Our self service needs are unique enough that this functionality would
> remain a separate system.
Pavol already answered most of that.
I would just add that midPoint has a comprehensive interface that can be
used to control approx. 95% of all midPoint functionality. That
interface is available as local Java, SOAP-based web service and REST.
So making a custom GUI on top of midPoint is possible - even if that
custom GUI is very rich. In fact, this is the same interface that our
stock GUI is using. The details are here:
https://wiki.evolveum.com/display/midPoint/Interfaces
> How painful is it to have a large number of attributes on a user? I
> see in the demo how a couple were added. To start tracking everything,
> I'm going to need a lot more. As noted in the comparison, academia
> doesn't have clean organizational units.
As Pavol already mentioned, the only slight pain point now is the GUI.
But if you are going to have your own GUI then it is perhaps not a
problem for you. Even for stock midPoint GUI there are improvements
planned for next midPoint release (version 3.4 planned to be released
before the summer).
> Is there any sensible way to store something like course registrations
> in the system? I'm guessing that I'll still need to manage that
> separately for the systems that need that information and/or to make
> decisions off of that information.
In addition to Pavol's suggestion there might be another way: you can
model courses as midPoint organizations ("orgs" as we call it).
MidPoint organizational structure is very flexible: it may have multiple
roots, it does not need to be a strict tree and in fact it can handle
anything that can be modeled as series of oriented acyclic graphs. Then
you can use midPoint assignments to represent student-course relation
(attending the course), teacher-course relations, etc. The "orgs" also
behave as roles. So this will give you very flexible access control
model, e.g. for delegated administration of courses. I would recommend
this approach. There are some drawbacks, though. Firstly, the current
midPoint GUI is not well designed to properly handle big number of
assignments. There are improvements coming in 3.4, but you will need a
custom component to display this information conveniently. We are
currently going in this way. The master development branch has an
ability to add custom forms (as Java + Apache Wicket components) and
that will be part of the 3.4 release. Secondly, I'm not entirely
confident about scalability here. Theoretically midPoint should be able
to handle that. We have just never tested this scenario and practice
often has some surprises in store. So it might be good idea to prototype
it first.
> It's not immediately obvious to me, how hard is it to write a
> connector that operates asynchronously? The RabbitMQ model works quite
> well for us, and it would be quickest and easiest to to move those
> over as is until time permits new options to be developed. For some of
> them doing PowerShell, there might not be good other options anyway.
That is currently one of the harder issues. MidPoint now operates
synchronously for vast majority of operations. To be completely honest,
this is partially a design feature and partially current limitation. It
is a design feature because synchronous systems are much more easy to
diagnose and debug. E.g. in midPoint we can complete state of every
operation (called "Model Context") that is maintained through the entire
operation (which can take weeks if there is an approval process) and
that also contains most of the operation side-effects. So we have quite
a good idea of cause-and-effect relationship in midPoint. And this is
especially critical if you have configured complex policies in midPoint
- and many deployments have really complex policies. But the synchronous
nature is also a partial limitation. This is mostly given by the fact
that the underlaying connection layer is synchronous. This is the ConnId
framework which is based on Sun Identity Connector Framework. We have
started there and this has somehow given the synchronous nature of
midPoint. But speaking from the experience working with both synchronous
and asynchronous systems: I will choose a synchronous systems whenever
possible, especially if it is a complex one. Diagnostics in the async
system is just a nightmare and there is not much that can be done about
it. On the other hand, midPoint has good diagnostic potential and the
crucial features are implemented in midPoint core since the very
beginning. And even though all of that is not yet visible in the GUI, we
are now working hard to improve this particular point.
Having said that I also have to say that there are some
semi-asynchronous parts in midPoint. E.g. we have live synchronization.
This is now implemented by invoking ConnId function that actively polls
for changes. But it in fact not entirely unlike polling the message
queue for new messages. There is also notifyChange() operation in our
interface that can be used for asynchronous processing.
There is more async features planned for future midPoint development.
But as of now the people that fund most of the midPoint development have
endorsed other features as more important than this and the sync
features do not yet have a specific date on them. But that might change.
MidPoint contributors and subscribers have the power to influence
roadmap ....
> How does it handle username changes? The connectors would need to know
> what the old username was, and what the new one will be so they can
> find and update the username in the remote system.
This is one of the things that we handle quite well. Most source and
target systems have other identifiers except for username. And those are
usually persistent and immutable. E.g. modern LDAP servers have
entryUUID, Active Directory has objectGUID, databases often have
persistent numeric primary keys and so on. MidPoint will primarily use
this identifier to link users and accounts. Therefore we can detect that
username changes in a similar fashion as we detect change of any other
ordinary attribute.
> We also need to keep track of training / terms of service usage that
> needs to be renewed. This then drives access to other systems. I'm
> guessing that we could implement that via assignments with expiration
> dates that are then used as dependencies for other services?
Yes. That is a good choice for expiring the assignment. That is actually
very easy. You can also use customized workflow to support requests and
"onboarding". However, currently we do not have capability to easily
handle renewals. E.g. it is not easy to trigger an event when
assignments expire. But we have plans to do something about that in 3.5,
as it is needed for the governance features that we are currently
working on. Again, as midPoint subscriber or contributor you would have
the ability to influence the roadmap and get the features that you need.
--
Radovan Semancik
Software Architect
evolveum.com
More information about the midPoint
mailing list