#### [Abblix\.Oidc\.Server](https://www.abblix.com/en/docs/api/abblix-oidc-server 'index')
### [Abblix\.Oidc\.Server\.Endpoints\.DynamicClientManagement](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.DynamicClientManagement 'Abblix\.Oidc\.Server\.Endpoints\.DynamicClientManagement')

## ReadClientRequestProcessor Class

Builds the RFC 7592 §2\.1 read\-client response from stored client metadata\. The
`client_secret` is intentionally omitted because secrets are persisted only as
hashes; a registration access token bearing the client's current jti is re\-issued so the
client can keep using the management endpoint after the read, without invalidating the token
it presented \(read stays idempotent — only update rotates the jti\)\.

```csharp
public class ReadClientRequestProcessor : Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IReadClientRequestProcessor
```

Inheritance [System\.Object](https://learn.microsoft.com/en-us/dotnet/api/system.object 'System\.Object') → ReadClientRequestProcessor

Implements [IReadClientRequestProcessor](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IReadClientRequestProcessor 'Abblix\.Oidc\.Server\.Endpoints\.DynamicClientManagement\.Interfaces\.IReadClientRequestProcessor')
### Constructors

## ReadClientRequestProcessor\(IRegistrationAccessTokenService, IRegistrationAccessTokenStore, ITokenIdGenerator, TimeProvider\) Constructor {#Abblix.Oidc.Server.Endpoints.DynamicClientManagement.ReadClientRequestProcessor.ReadClientRequestProcessor(Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenService,Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenStore,Abblix.Oidc.Server.Features.RandomGenerators.ITokenIdGenerator,System.TimeProvider)}

Builds the RFC 7592 §2\.1 read\-client response from stored client metadata\. The
`client_secret` is intentionally omitted because secrets are persisted only as
hashes; a registration access token bearing the client's current jti is re\-issued so the
client can keep using the management endpoint after the read, without invalidating the token
it presented \(read stays idempotent — only update rotates the jti\)\.

```csharp
public ReadClientRequestProcessor(Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenService registrationAccessTokenService, Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenStore registrationAccessTokenStore, Abblix.Oidc.Server.Features.RandomGenerators.ITokenIdGenerator tokenIdGenerator, System.TimeProvider clock);
```
#### Parameters

###### `registrationAccessTokenService` [IRegistrationAccessTokenService](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenService 'Abblix\.Oidc\.Server\.Endpoints\.DynamicClientManagement\.Interfaces\.IRegistrationAccessTokenService') {#Abblix.Oidc.Server.Endpoints.DynamicClientManagement.ReadClientRequestProcessor.ReadClientRequestProcessor(Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenService,Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenStore,Abblix.Oidc.Server.Features.RandomGenerators.ITokenIdGenerator,System.TimeProvider).registrationAccessTokenService}

###### `registrationAccessTokenStore` [IRegistrationAccessTokenStore](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenStore 'Abblix\.Oidc\.Server\.Endpoints\.DynamicClientManagement\.Interfaces\.IRegistrationAccessTokenStore') {#Abblix.Oidc.Server.Endpoints.DynamicClientManagement.ReadClientRequestProcessor.ReadClientRequestProcessor(Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenService,Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenStore,Abblix.Oidc.Server.Features.RandomGenerators.ITokenIdGenerator,System.TimeProvider).registrationAccessTokenStore}

###### `tokenIdGenerator` [ITokenIdGenerator](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.RandomGenerators.ITokenIdGenerator 'Abblix\.Oidc\.Server\.Features\.RandomGenerators\.ITokenIdGenerator') {#Abblix.Oidc.Server.Endpoints.DynamicClientManagement.ReadClientRequestProcessor.ReadClientRequestProcessor(Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenService,Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenStore,Abblix.Oidc.Server.Features.RandomGenerators.ITokenIdGenerator,System.TimeProvider).tokenIdGenerator}

###### `clock` [System\.TimeProvider](https://learn.microsoft.com/en-us/dotnet/api/system.timeprovider 'System\.TimeProvider') {#Abblix.Oidc.Server.Endpoints.DynamicClientManagement.ReadClientRequestProcessor.ReadClientRequestProcessor(Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenService,Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IRegistrationAccessTokenStore,Abblix.Oidc.Server.Features.RandomGenerators.ITokenIdGenerator,System.TimeProvider).clock}
### Methods

## ReadClientRequestProcessor\.ProcessAsync\(ValidClientRequest\) Method {#Abblix.Oidc.Server.Endpoints.DynamicClientManagement.ReadClientRequestProcessor.ProcessAsync(Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.ValidClientRequest)}

Produces the response payload for the addressed client, including its current metadata
and a refreshed registration access token\.

```csharp
public System.Threading.Tasks.Task<Abblix.Utils.Result<Abblix.Oidc.Server.Model.ReadClientSuccessfulResponse,Abblix.Oidc.Server.Common.OidcError>> ProcessAsync(Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.ValidClientRequest request);
```
#### Parameters

###### `request` [ValidClientRequest](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.ValidClientRequest 'Abblix\.Oidc\.Server\.Endpoints\.DynamicClientManagement\.Interfaces\.ValidClientRequest') {#Abblix.Oidc.Server.Endpoints.DynamicClientManagement.ReadClientRequestProcessor.ProcessAsync(Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.ValidClientRequest).request}

A request whose authentication and target client have been validated\.

Implements [ProcessAsync\(ValidClientRequest\)](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IReadClientRequestProcessor#Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.IReadClientRequestProcessor.ProcessAsync(Abblix.Oidc.Server.Endpoints.DynamicClientManagement.Interfaces.ValidClientRequest) 'Abblix\.Oidc\.Server\.Endpoints\.DynamicClientManagement\.Interfaces\.IReadClientRequestProcessor\.ProcessAsync\(Abblix\.Oidc\.Server\.Endpoints\.DynamicClientManagement\.Interfaces\.ValidClientRequest\)')

#### Returns
[System\.Threading\.Tasks\.Task&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')[Abblix\.Utils\.Result&lt;](https://learn.microsoft.com/en-us/dotnet/api/abblix.utils.result-2 'Abblix\.Utils\.Result\`2')[ReadClientSuccessfulResponse](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Model.ReadClientSuccessfulResponse 'Abblix\.Oidc\.Server\.Model\.ReadClientSuccessfulResponse')[,](https://learn.microsoft.com/en-us/dotnet/api/abblix.utils.result-2 'Abblix\.Utils\.Result\`2')[OidcError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.OidcError 'Abblix\.Oidc\.Server\.Common\.OidcError')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/abblix.utils.result-2 'Abblix\.Utils\.Result\`2')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')
