[midPoint] Active Directory and custom attributes & auxiliary objectclass
midpoint at mybtinternet.com
midpoint at mybtinternet.com
Thu Jul 9 12:09:39 CEST 2015
Hi,
Jason, thank you for the samples. It confirmed that I had indeed performed all the steps required.
This allowed me to read and write custom attributes once the auxiliary class was added to the
user entry.
Something else I learned from the examples was the use on the namespace ... this was somewhat
more murky for me before. Is there a good description of their use in the docs?
One thing I did not find however, was how the auxiliary was added to the user entry; e.g. the crux
of my problem. As Pavol suggested, most may have amended the base objectClass, or create a
new person objectClass, and subsequently would not have the issue.
As I am not willing to add new attributes to existing OOTB objectClasses, I had to find a different
solution. Don't like this much either, but later discovered OpenAM already did this in our environment,
but you can set a relationship from the user objectClass to the auxiliary objectClass in the AD
schema. This then allows you to manage the custom attributes without the need to explicitly add the
objectClass to the user entry. For reference, this article describes how to do this:
https://msdn.microsoft.com/en-us/library/bb727064.aspx
Ideally I would like to see proper auxiliary support for AD as with OpenDJ, but I can live with the
solution I have for now.
Regards,
Anton
----Original message----
>From : mederly at evolveum.com
Date : 09/07/2015 - 06:59 (BST)
To : midpoint at lists.evolveum.com
Subject : Re: [midPoint] Active Directory and custom attributes & auxiliary objectclass
Jason, Anton,
thank you for samples & suggestions for the wiki article. I
hope I'll be able to update it soon.
Anton, have you succeeded in solving your problem? If not, how
urgent is it for you?
Pavol
Sorry, that bshpSchema was a little outdatedm wrong
display order/names
On Tue, Jul 7, 2015 at 12:11 PM, Jason
Everling <jeverling at bshp.edu>
wrote:
Yes, it is defined against account. I did not
modify anything in midPoint. All I did was reference those
attributes in an objectTemplate during user creation and
modification.
I added our files along with our AD resource header
below
schema.xml is in the root on the connector server so
c:\program files (x86)\Identity Connectors\Connector
Server\ and bshpSchema.xsd is in midpoint.home location
/schema folder.
Sampled from top, the blue is what you would need to
add then reference that in templates and resource
<objects xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3"
xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
xmlns:mr="http://prism.evolveum.com/xml/ns/public/matching-rule-3"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance-3"
xmlns:icfc="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/connector-schema-3"
xmlns:icfs="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3"
xmlns:bshp="http://idm.test.local/xml/ns/public/testdomain"
xsi:schemaLocation="http://midpoint.evolveum.com/xml/ns/public/common/common-3
../../infra/schema/src/main/resources/xml/ns/public/common/common-3.xsd">
<icfc:configurationProperties
xmlns:icfcad="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/bundle/ActiveDirectory.Connector/Org.IdentityConnectors.ActiveDirectory.ActiveDirectoryConnector"
xmlns:ex="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/bundle/ActiveDirectory.Connector/Org.IdentityConnectors.ActiveDirectory.ActiveDirectoryConnector">
<icfcad:DirectoryAdminName>USER</icfcad:DirectoryAdminName>
<icfcad:DirectoryAdminPassword>
<clearValue>PASSWORD</clearValue>
</icfcad:DirectoryAdminPassword>
<icfcad:ObjectClass>User</icfcad:ObjectClass>
<icfcad:Container>dc=TEST,dc=LOCAL</icfcad:Container>
<icfcad:CreateHomeDirectory>false</icfcad:CreateHomeDirectory>
<icfcad:LDAPHostName>DC1.TEST.LOCAL</icfcad:LDAPHostName>
<icfcad:SearchChildDomains>false</icfcad:SearchChildDomains>
<icfcad:DomainName>TEST.LOCAL</icfcad:DomainName>
<icfcad:SyncGlobalCatalogServer>DC1.TEST.LOCAL</icfcad:SyncGlobalCatalogServer>
<icfcad:SyncDomainController>DC1.TEST.LOCAL</icfcad:SyncDomainController>
<!--
Extend Schema (reference to file on Domain
Controller) -->
<ex:ObjectClassesExtensionFile>schema.xml</ex:ObjectClassesExtensionFile>
</icfc:configurationProperties>
Then in objectTemplate mappings or resource mappings
define each attribute
<attribute>
<ref>ri:eduPersonAffiliation</ref>
<outbound>
<source>
<path>
declare namespace bshp="http://idm.test.local/xml/ns/public/testdomain";
$c:user/c:extension/bshp:eduPersonAffiliation
</path>
</source>
</outbound>
<inbound>
<target>
<path>
declare namespace bshp="http://idm.test.local/xml/ns/public/testdomain";
$c:user/c:extension/bshp:eduPersonAffiliation
</path>
</target>
</inbound>
</attribute>
JASON
On Tue, Jul 7, 2015 at 9:13
AM, <midpoint at mybtinternet.com>
wrote:
Hi,
I second this ... and did the same.
Regards,
Anton
----Original
message----
From : jeverling at bshp.edu
Date : 06/07/2015 - 17:26 (BST)
To : midpoint at lists.evolveum.com
Subject : Re: [midPoint] Active Directory
and custom attributes & auxiliary
objectclass
There
is also some parts that should be added
to that wiki page,
After creating
the schema.xml and adding to your
server with the Connector Server
running you have to create an
extension file for midpoint to match
that one and place in midpoint.home
schema like these (https://github.com/Evolveum/midpoint/tree/master/samples/schema)
so that midPoint can read/write to
those new objectClass attributes.
After those are
added you have to add a new
declaration to your resource xml like
so
xmlns:my="http://myself.me/schemas/whatever"
Then
after you have to use that in each
custom attribute mapping like so
<attribute>
<ref>ri:customAttribute</ref>
<outbound> <source>
<path> declare namespace my="http://myself.me/schemas/whatever";
$c:user/c:extension/my:customAttribute
</path> </source>
</outbound> <inbound>
<target> <path> declare
namespace my="http://myself.me/schemas/whatever";
$c:user/c:extension/my:customAttribute
</path> </target>
</inbound> </attribute>
After you
add those you can read/write to
any attribute and also create new
users with those new attributes.
When I
first setup our AD resource it
took me a little while after
looking at the samples, something
like this I think should also be
added/mentioned to that wiki page
JASON
On Mon, Jul 6,
2015 at 11:03 AM, Jason Everling <jeverling at bshp.edu>
wrote:
I am using the AD
Connector with additional custom
auxiliary object classes ( I have 4
additional classes ) and it works
fine when I create new users in the
GUI or from any other resource and
is correctly created in AD.
My Object Classes managed in
midPoint using the extension
functionality
bshpGroup
bshpOrg
bshpPerson
eduPerson
All of the above in AD Schema
are Class Type: Auxiliary with
Parent "top"
Is this not the same?
JASON
On Mon,
Jul 6, 2015 at 9:05 AM, Pavol
Mederly <mederly at evolveum.com>
wrote:
Hello Anton,
now I perhaps understand
your situation a little
bit better. Because what
I was used to see was
that people extended the
"basic" AD user object
with custom attributes,
without introducing
separate objectClasses.
Neither did I; and
although I've seen that
you had mentioned using
auxiliary object
classes, I have no
experiences with them in
Active Directory.
I was
hoping it is
possible to override
the objectClasses in
the schema handling,
but
can't find an
example.
If you mean
adding auxiliary object
classes, then a sample
is e.g. in testing\story\src\test\resources\unix\resource-opendj.xml
file. However,
unfortunately, this is a
feature of new LDAP
connector. The
ActiveDirectory
connector does not
support auxiliary object
classes yet.
The
other option, I
guess, would be to
use the the custom
schema feature of
ObjectClassesExtensionFile,
but I have a few
questions on this:
1) Is the
objectClass type
always Tenant?
No. The new
object class can be
anything. "Tenant" was
an object class that was
used in a particular
customer's setting.
2) Does
this add an
objectClass in
addition of the user
class or instead of
the user class?
In addition to
the user class. The
existing
AccountObjectClass will
be left intact. New
object class will be
seen in midPoint as
CustomsomeNameObjectClass,
if the object class will
be defined as "someName"
in the connector.
Unfortunately, the
connector will not
recognize such a class
to be an extension of
the AccountObjectClass
and will not apply the
standard functionality
(written in C#) to
manage objects of this
class.
So, if you would like to
use it to manage your
users, you would need
either
1) to implement
everything in
PowerShell, which is
quite a lot of work
(given that you would
have to implement e.g.
exception handling, and
so on),
2) or to do some hacking
with custom scripts,
like calling original AD
connector to do its part
of the work and then
manage specific
attributes using
PowerShell.
Neither of this seems to
me a "clean solution".
Overall, we plan to
enhance Active Directory
connector with some of
the new features Radovan
has recently implemented
for LDAP one. Auxiliary
object class support is
among them. But I cannot
say when that would be
done. Maybe you could
contact Igor Farinic for
options there.
3) How
/ when are the
custom scripts
called?
Custom scripts
feature is currently
only available in
Exchange connector,
which is a superset of
AD connector useful
mainly if you want to
manage also Exchange
objects. (But I think
nothing precludes the
use of it in AD-only
settings; I hope it no
longer depends on the
existence of specific
Exchange run time
libraries.) These
scripts are called
before, after and/or
instead of "main" C#
code. They can be
configured with regards
to object class and
operation. E.g. you can
define a "Before" script
for each "Create"
operation for
"AddressBookList" object
class. Or, if you have a
custom object class, you
have to define all the
operations as PowerShell
custom scripts.
This is an example of
definition of a custom
script:
<?xml
version="1.0"?>
<ScriptingInfo>
<OperationInfo>
<Type>Create</Type>
<AfterMain>
<ObjectType>OfflineAddressBook</ObjectType>
<File>after-create-OAB.ps1</File>
</AfterMain>
</OperationInfo>
</ScriptingInfo>
It says that after
executing main C#
routine for Create
operation for
OfflineAddressBook
object, the
after-create-OAB.ps1
file (stored in the
ConnectorServer
directory) will be
executed.
Such a script can expect
one parameter, called
"ctx" (context),
pointing to the
following data
structure:
public class Context
{
public
Connector Connector {
get; set; }
public
ActiveDirectoryConfiguration
ConnectorConfiguration
{ get; set; }
public
string OperationName {
get; set; }
public
Scripting.Position
Position { get; set; }
public
ObjectClass
ObjectClass { get;
set; }
}
(There are specific
contexts for individual
operations, see https://github.com/Evolveum/openicf/blob/master/connectors/dotnet/ActiveDirectoryConnector/Scripting.cs
4) Is
there examples on
how to use the
custom schema
feature?
Well, the
documentation of these
new features is still in
its beginnings. I'm
afraid the wiki article
I mentioned is the only
piece available :(
Maybe someone on this
list could provide some
examples...
Overall, the most clean
way (as I currently see
it) is to add support
for auxiliary object
classes to the standard
AD/Exchange connector.
Best regards,
Pavol
On 6. 7. 2015 14:51,
ANTON OPPERMAN
wrote:
Thx
Pavol! That is
getting me very
close ...
Took a while to
figure out just how
to do it; the
documentation can be
clearer; e.g. where
the value of
ObjectClassesExtensionFile
is set and which
system it should be
stored on. I
saw a ref in the UI
that seemed to allow
for this, but this
didn't work for me.
I have defined my
custom schema
entries in the
AccountObjectClass
section and can
retrieve and set
values if my
auxiliary
objectClass is
present on the user.
Obviously
creating an account
with schema
extension fails as
newly created users
will not have
the auxiliary
objectClass (yet).
I was hoping it is
possible to override
the objectClasses in
the schema handling,
but
can't find an
example. The other
option, I guess,
would be to use the
the custom
schema feature of
ObjectClassesExtensionFile,
but I have a few
questions on this:
1) Is the
objectClass type
always Tenant?
2) Does this add an
objectClass in
addition of the user
class or instead of
the user class?
3) How / when are
the custom scripts
called?
4) Is there examples
on how to use the
custom schema
feature?
Thx!
Regards,
Anton
----Original
message----
From : mederly at evolveum.com
Date : 02/07/2015
- 15:17 (BST)
To : midpoint at lists.evolveum.com
Subject : Re:
[midPoint] Active
Directory and
custom attributes
& auxiliary
objectclass
Hello Anton,
the AD connector
schema can now
be extended via
configuration.
Please see https://wiki.evolveum.com/display/midPoint/Extending+AD+and+Exchange+Connector+Schema+HOWTO
for a simple
HOWTO.
However,
contrary to
what's written
there, I would
recommend using
the latest
versions of
AD/Exchange
connector and
ConnId:
- Exchange
Connector:
1.4.1.20283 (https://wiki.evolveum.com/display/midPoint/Exchange+Connector)
- Connector
Server: 1.4.0.84
(https://wiki.evolveum.com/display/midPoint/.NET+Connector+Server)
Also please note
that auxiliary
object classes
are not
supported for
AD. What you
need to do is to
extend the basic
AccountObjectClass
(or object class
for group/OU)
with your custom
attributes.
Best regards,
Pavol
On 2. 7. 2015
16:10, midpoint at mybtinternet.com
wrote:
Hi,
We intend
managing a
number of
different
directories with
similar data but
for populations
of users that
must be stored
separately. We
also have a
fairly extensive
number of custom
attributes
grouped in an
auxiliary
objectClass.
For OpenDJ, I
was able to
setup the
resources and am
able to manage
all the custom
attributes; e.g.
the connector
allows
definition of
which classes to
use.
Now trying to
replicate with
AD and have
basic AD
provisioning
working;
however, I don't
see similar
options for
defining
additional
objectClasses to
use. Have looked
in Jira; all
references
suggest
modifying
objectClasses.xml
and building a
custom instance
of the
connector. I
don't see how
the custom
objectClass is
referenced. Have
I missed
something?
As for
building a
custom instance
of the
connector; I
would prefer not
to do that as:
1)
we could run
into issues that
are related to
our attempt of
implementing
2) each time
there is a new
fix, we would
need to go and
retro-fit and
rebuild
3) each time
we extend the
schema, we need
to go and ammend
and rebuild
While I may be
able to build a
custom instance,
once this is
handed-over to
business-as-usual,
they
most certainly
will not have
the skills to
support this.
Is this still
the process to
follow at this
time, or has
this changed? If
not changed, is
there a plan to
make the AD
adapter
configurable ito
custom schema
(like OpenDJ)?
Time-frame?
Thx
Regards,
Anton
_______________________________________________
midPoint mailing list
midPoint at lists.evolveum.com
http://lists.evolveum.com/mailman/listinfo/midpoint
_______________________________________________
midPoint mailing list
midPoint at lists.evolveum.com
http://lists.evolveum.com/mailman/listinfo/midpoint
_______________________________________________
midPoint mailing list
midPoint at lists.evolveum.com
http://lists.evolveum.com/mailman/listinfo/midpoint
--
JASON
--
JASON
CONFIDENTIALITY NOTICE:
This e-mail together with any attachments is
proprietary and confidential; intended for
only the recipient(s) named above and may
contain information that is privileged. You
should not retain, copy or use this e-mail
or any attachments for any purpose, or
disclose all or any part of the contents to
any person. Any views or opinions expressed
in this e-mail are those of the author and
do not represent those of the Baptist School
of Health Professions. If you have received
this e-mail in error, or are not the named
recipient(s), you are hereby notified that
any review, dissemination, distribution or
copying of this communication is prohibited
by the sender and to do so might constitute
a violation of the Electronic Communications
Privacy Act, 18 U.S.C. section 2510-2521.
Please immediately notify the sender and
delete this e-mail and any attachments from
your computer.
_______________________________________________
midPoint mailing list
midPoint at lists.evolveum.com
http://lists.evolveum.com/mailman/listinfo/midpoint
--
JASON
--
JASON
CONFIDENTIALITY NOTICE:
This e-mail together with any attachments is proprietary and
confidential; intended for only the recipient(s) named above and
may contain information that is privileged. You should not
retain, copy or use this e-mail or any attachments for any
purpose, or disclose all or any part of the contents to any
person. Any views or opinions expressed in this e-mail are those
of the author and do not represent those of the Baptist School
of Health Professions. If you have received this e-mail in
error, or are not the named recipient(s), you are hereby
notified that any review, dissemination, distribution or copying
of this communication is prohibited by the sender and to do so
might constitute a violation of the Electronic Communications
Privacy Act, 18 U.S.C. section 2510-2521. Please immediately
notify the sender and delete this e-mail and any attachments
from your computer.
_______________________________________________
midPoint mailing list
midPoint at lists.evolveum.com
http://lists.evolveum.com/mailman/listinfo/midpoint
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.evolveum.com/pipermail/midpoint/attachments/20150709/9762ae1a/attachment.htm>
More information about the midPoint
mailing list