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

## ServiceCollectionExtensions Class

Service\-collection extensions for the RFC 9396 Rich Authorization Requests feature\.

```csharp
public static class ServiceCollectionExtensions
```

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

## ServiceCollectionExtensions\.AddAuthorizationDetailValidator\<TValidator\>\(this IServiceCollection, string\) Method {#Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions.AddAuthorizationDetailValidator_TValidator_(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,string)}

Registers a per\-type validator for RFC 9396 authorization\_details entries whose
`type` value matches [type](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions#Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions.AddAuthorizationDetailValidator_TValidator_(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,string).type 'Abblix\.Oidc\.Server\.Features\.RichAuthorizationRequests\.ServiceCollectionExtensions\.AddAuthorizationDetailValidator\<TValidator\>\(this Microsoft\.Extensions\.DependencyInjection\.IServiceCollection, string\)\.type')\. The composite
[IAuthorizationDetailsPolicy](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.RichAuthorizationRequests.IAuthorizationDetailsPolicy 'Abblix\.Oidc\.Server\.Features\.RichAuthorizationRequests\.IAuthorizationDetailsPolicy') dispatches each entry in the
authorization\_details array to the implementation keyed by the entry's `type`\.

```csharp
public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddAuthorizationDetailValidator<TValidator>(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, string type)
    where TValidator : class, Abblix.Oidc.Server.Features.RichAuthorizationRequests.IAuthorizationDetailValidator;
```
#### Type parameters

###### `TValidator` {#Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions.AddAuthorizationDetailValidator_TValidator_(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,string).TValidator}

The per\-type validator implementation\.
#### Parameters

###### `services` [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') {#Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions.AddAuthorizationDetailValidator_TValidator_(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,string).services}

The service collection to register the validator in\.

###### `type` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions.AddAuthorizationDetailValidator_TValidator_(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,string).type}

The authorization\-detail `type` value the validator handles
            \(RFC 9396 §2\.1\)\. Used as the DI key; byte\-exact match with the inbound entry's
            `type` member\.

#### Returns
[Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection')  
The service collection for method chaining\.

### Remarks
A single keyed registration via
[Microsoft\.Extensions\.DependencyInjection\.Extensions\.ServiceCollectionDescriptorExtensions\.TryAddKeyedSingleton&lt;&gt;\.Extensions\.DependencyInjection\.IServiceCollection,System\.Object\)](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.extensions.servicecollectiondescriptorextensions.tryaddkeyedsingleton--2#microsoft-extensions-dependencyinjection-extensions-servicecollectiondescriptorextensions-tryaddkeyedsingleton--2(microsoft-extensions-dependencyinjection-iservicecollection-system-object) 'Microsoft\.Extensions\.DependencyInjection\.Extensions\.ServiceCollectionDescriptorExtensions\.TryAddKeyedSingleton\`\`2\(Microsoft\.Extensions\.DependencyInjection\.IServiceCollection,System\.Object\)')
serves both O\(1\) request\-time dispatch
\(`GetKeyedService<IAuthorizationDetailValidator>(type)`\) and discovery
enumeration in slice \#132 via
`GetKeyedServices<IAuthorizationDetailValidator>(KeyedService.AnyKey)`
\(\.NET 8\+\)\. No `TryAddEnumerable` parallel slot\.

## ServiceCollectionExtensions\.AddRichAuthorizationRequests\(this IServiceCollection\) Method {#Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions.AddRichAuthorizationRequests(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection)}

Registers the OAuth 2\.0 Rich Authorization Requests \(RFC 9396\) infrastructure: the
composite [IAuthorizationDetailsPolicy](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.RichAuthorizationRequests.IAuthorizationDetailsPolicy 'Abblix\.Oidc\.Server\.Features\.RichAuthorizationRequests\.IAuthorizationDetailsPolicy') and the
[IAuthorizationDetailsMetadataProvider](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.RichAuthorizationRequests.IAuthorizationDetailsMetadataProvider 'Abblix\.Oidc\.Server\.Features\.RichAuthorizationRequests\.IAuthorizationDetailsMetadataProvider') discovery contributor\. Called
unconditionally from `AddFeatures` so the server boots cleanly with zero
[IAuthorizationDetailValidator](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.RichAuthorizationRequests.IAuthorizationDetailValidator 'Abblix\.Oidc\.Server\.Features\.RichAuthorizationRequests\.IAuthorizationDetailValidator') implementations registered; RAR\-bearing
requests are rejected with `invalid_authorization_details` per RFC 9396 §5
until at least one validator is registered via
[AddAuthorizationDetailValidator&lt;TValidator&gt;\(this IServiceCollection, string\)](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions#Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions.AddAuthorizationDetailValidator_TValidator_(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,string) 'Abblix\.Oidc\.Server\.Features\.RichAuthorizationRequests\.ServiceCollectionExtensions\.AddAuthorizationDetailValidator\<TValidator\>\(this Microsoft\.Extensions\.DependencyInjection\.IServiceCollection, string\)')\.

```csharp
public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddRichAuthorizationRequests(this Microsoft.Extensions.DependencyInjection.IServiceCollection services);
```
#### Parameters

###### `services` [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') {#Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions.AddRichAuthorizationRequests(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection).services}

The service collection to configure\.

#### Returns
[Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection')  
The service collection for method chaining\.
