Hi Ivan,
Thank you for the feedback. I truly appreciate it.
Please see inline below for comments and other follow up.
module:
primary_identifier.PrimaryIdentifier
name: PrimaryIdentifier
config:
idp_identifiers:
- epuid
-
- eppn
- name_id: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
-
- eppn
- edupersontargetedid
- eppn
-
- name_id: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
- issuer
-
- edupersontargetedid
- issuer
clear_input_attributes: no
primary_identifier: uid
on_error:
https://registration.scienceforum.sc/registry/collaboration_error/co_collab…
idp_identifiers defines an array of internal attributes
It is an ordered list.
So in Python it would be
[
'epuid',
['eppn',
'name_id:urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'],
['eppn', 'edupersontargetedid'],
'eppn',
['name_id:
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent','issuer'],
['edupersontargetedid', 'issuer']
]
to be looked
up. If one has no name then the service should look for a subarray
which is expected to have multiple items defining some dependent
behaviour.
For example, the second element in the list is
['eppn', 'name_id:urn:oasis:names:tc:SAML:2.0:nameid-format:persistent']
which means that the combination of eduPersonPrincipalName and SAML2
persistent NameID would be the identifier.
The list specifies the ordered preference.
We prefer
['eppn', 'name_id:urn:oasis:names:tc:SAML:2.0:nameid-format:persistent']
over just
'eppn'
for example because if an IdP asserts both then we have to assume the
IdP is signalling that it re-assigns eduPersonPrincipalName and we must
use both to construct the primary identifier.
With this
configuration the microservice will examine the attributes
asserted by a campus/organization IdP and look in the following order
for a value to use as the primary identifier:
I am not sure I understand the search conditions. Here is what I get:
<snip>
I am not sure I understand correctly. Could you please
elaborate?
The list specifies the preferred ordering or ranking, not the logic or
algorithm of how the microservice actually examines the attributes that
the IdP asserts.
The list is just stating that eduPersonUniqueId is preferred first, then
the combination of eduPersonPrincipalName and SAML2 persistent NameID,
and so on.
The special
identifier 'issuer' signals that any value found is to be
"scoped" with the entityID of the IdP.
I do not really like the configuration format.
I do not either. I am glad you said so.
By reading it one has
no idea what is going on, unless one knows the internals. I would
propose to convert the format to key-value pairs where the key has a
clear name that denotes the behaviour.
If you have time and the inclination can you provide an example of what
you suggest?
In the same sense I would say that 'issuer'
should not be value, but a
key on the object it needs to place the scope. Something like:
- attribute: name_id
scope: true # or
scope: 'scope_value'
Hmmmm. Thanks. I will put some thought into that.
When it finds
the first value it can use from that search order it then
asserts that value as 'uid' to the SP.
'uid' (as set by the 'primary_identifier
') is an internal attribute,
right?
Correct.
If no value is
found after the configured search order then since
'on_error' is set it will redirect the browser to an "error" service to
handle that error.
that's a nice idea, delegating errors on a different service, as
satosa is not very flexible as to what to present in case of an error
I think it is the best approach and will allow SATOSA to focus on doing
fewer things well.
But it does suggest we will want some type of "standard" for
communicating the errors from SATOSA to the other service.
Right now I am just redirecting the browser to the error service with a
query string that includes the SP and IdP entityIDs so we can track
which SPs users were trying to access and which IdPs did not give us
anything we can use as an identifier.
I am not particularly happy with that either but I need something right
now and hope that some type of "standard" could evolve.
I am wondering
if any other project might have use for the microservice?
Any other thoughts?
I do not really have a use case in my mind, but the way I see what
you're trying to do is, as a fallback mechanism for an attribute to
get a value.
I don't think of it that way.
I think of it as the only approach to be able to uniquely identify a
user for a VO that federates widely across eduGAIN where the practice of
what attributes an IdP will assert varies across the entire spectrum.
Let me put it a different way to the list: if your SATOSA proxy is
federating with IdPs from InCommon, most EU countries, Japan, Australia,
Chile, and India, how do you make sure that you uniquely identify each
user so that a simple SP behind the proxy can just look at $REMOTE_USER?
Given the definition of the R&S entity category and that IdPs do
re-assign ePPN, as well as the realities of IdPs only sending a targeted
identifier sometimes, I don't see any way to do this other than use the
ordered list I am proposing?
Attribute mapping does that but with less flexibility
(ie
no special conditions with name_id, no error handling etc). I was
thinking if this can be implemented using the AttributeProcessor
service that was merged lately (but I need to understand the
requirements first).
Thanks. I will look at that in more detail.
Thanks again for the dialogue.
Cheers,
Scott K