Client Identifier Resolution

Description

Following on from , this ticket tracks the creation of a resolver for pulling out the correct client_id (and hence client) from the established OP.

Environment

None

Activity

Philip SmartApril 1, 2022 at 12:31 PM

The storage service has been removed, and replaced by a simple injected Map.

Philip SmartMarch 24, 2022 at 1:09 PM

As per , we can remove the storage service and just inject the map directly into the strategy.

Philip SmartMarch 24, 2022 at 11:17 AM

As pointed out, having another resolver service for this was unnecessary, instead, adding the logic via a strategy to the profile configuration (which is already a reloadable service). This is now done using the following logic:

  • By default, the client identifier lookup strategy constructs a client_id value from that provided in the oidc properties file. This allows quick configuration if there is only a single client.

  • If there is more than one client e.g. some kind of discovery flow is used to choose the OP, the client_id property value can be commented out, and the strategy will use a further embedded strategy to lookup the client identifier from the given issuer_id of the chosen OP.

    • The default strategy for this is backed by a storage service. Currently, an in-memory service is constructed from the same map as shown in . This would need to be added to the relying party XML by the deployer.

  • This can also be overridden by specifying a client_id in a RelyingPartyOverrides profile bean for an OP. This is arguably better than having to add the map into the relying-party.xml. Although it would mean adding an override for every OP if you are dealing with more than one.

Philip SmartMarch 18, 2022 at 12:59 PM

As with the client authentication resolver, a single mapping could be taken from the properties file for easier configuration.

Philip SmartMarch 18, 2022 at 12:57 PM

Moving to commons project

Philip SmartMarch 18, 2022 at 11:48 AM
Edited

Created a client_id resolver and started a reloadable service implementation. Uses a Storage Service backend, which by default is a simple map loaded from a user space XML file that maps between issuers and client_ids e.g.

This could be consolidated with the client authentication resolver, but as they are used in different parts of the flow, I have separated them for now. This is added to a OAuth2ClientContext which is then authoritative for the identifier of the client to use and key off in other lookups.

Fixed

Details

Assignee

Reporter

Created March 18, 2022 at 11:35 AM
Updated October 14, 2022 at 1:10 PM
Resolved October 14, 2022 at 1:10 PM