#### [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')

## IAuthorizationDetailsPolicy Interface

Single request\-time entry point for the RFC 9396 authorization\_details policy: per\-client
allowlist \(§5\.1\) plus per\-type composite dispatch \(§5\)\. Endpoint\-side adapters delegate
here so /authorize, /par, CIBA and device\-flow share one policy source\.

```csharp
public interface IAuthorizationDetailsPolicy
```

### Remarks
Registered unconditionally by [AddRichAuthorizationRequests\(this IServiceCollection\)](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions#Abblix.Oidc.Server.Features.RichAuthorizationRequests.ServiceCollectionExtensions.AddRichAuthorizationRequests(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection) 'Abblix\.Oidc\.Server\.Features\.RichAuthorizationRequests\.ServiceCollectionExtensions\.AddRichAuthorizationRequests\(this Microsoft\.Extensions\.DependencyInjection\.IServiceCollection\)')
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\. Per RFC 9396 §5 \(the AS MUST refuse unknown types\), an empty
registry rejects every RAR\-bearing request — this is conformance\-mandatory, not a
configurable policy\.
### Methods

## IAuthorizationDetailsPolicy\.ApplyAsync\(JsonArray, ClientInfo, CancellationToken\) Method {#Abblix.Oidc.Server.Features.RichAuthorizationRequests.IAuthorizationDetailsPolicy.ApplyAsync(System.Text.Json.Nodes.JsonArray,Abblix.Oidc.Server.Features.ClientInformation.ClientInfo,System.Threading.CancellationToken)}

Full RFC 9396 §5 \+ §5\.1 request\-time validation entry point\. Takes the raw
authorization\_details array as it landed on the wire, applies the per\-client
allowlist, dispatches each typed entry to its keyed
[IAuthorizationDetailValidator](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.RichAuthorizationRequests.IAuthorizationDetailValidator 'Abblix\.Oidc\.Server\.Features\.RichAuthorizationRequests\.IAuthorizationDetailValidator'), and returns the validated raw array
for the pipeline to forward\.

```csharp
System.Threading.Tasks.Task<Abblix.Utils.Result<System.Text.Json.Nodes.JsonArray?,Abblix.Oidc.Server.Common.OidcError>> ApplyAsync(System.Text.Json.Nodes.JsonArray? raw, Abblix.Oidc.Server.Features.ClientInformation.ClientInfo client, System.Threading.CancellationToken token);
```
#### Parameters

###### `raw` [System\.Text\.Json\.Nodes\.JsonArray](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.nodes.jsonarray 'System\.Text\.Json\.Nodes\.JsonArray') {#Abblix.Oidc.Server.Features.RichAuthorizationRequests.IAuthorizationDetailsPolicy.ApplyAsync(System.Text.Json.Nodes.JsonArray,Abblix.Oidc.Server.Features.ClientInformation.ClientInfo,System.Threading.CancellationToken).raw}

The raw `authorization_details` array off the wire, or
            `null` / empty when the request did not carry one\.

###### `client` [ClientInfo](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.ClientInformation.ClientInfo 'Abblix\.Oidc\.Server\.Features\.ClientInformation\.ClientInfo') {#Abblix.Oidc.Server.Features.RichAuthorizationRequests.IAuthorizationDetailsPolicy.ApplyAsync(System.Text.Json.Nodes.JsonArray,Abblix.Oidc.Server.Features.ClientInformation.ClientInfo,System.Threading.CancellationToken).client}

The authenticated client; [AuthorizationDetailsTypes](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.ClientInformation.ClientInfo#Abblix.Oidc.Server.Features.ClientInformation.ClientInfo.AuthorizationDetailsTypes 'Abblix\.Oidc\.Server\.Features\.ClientInformation\.ClientInfo\.AuthorizationDetailsTypes')
            drives the allowlist branch\.

###### `token` [System\.Threading\.CancellationToken](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken 'System\.Threading\.CancellationToken') {#Abblix.Oidc.Server.Features.RichAuthorizationRequests.IAuthorizationDetailsPolicy.ApplyAsync(System.Text.Json.Nodes.JsonArray,Abblix.Oidc.Server.Features.ClientInformation.ClientInfo,System.Threading.CancellationToken).token}

Cancellation token forwarded to per\-type validators\.

#### 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')[System\.Text\.Json\.Nodes\.JsonArray](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.nodes.jsonarray 'System\.Text\.Json\.Nodes\.JsonArray')[,](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')  
On success — the raw [System\.Text\.Json\.Nodes\.JsonArray](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.nodes.jsonarray 'System\.Text\.Json\.Nodes\.JsonArray') that survived validation \(or `null`
when the input was null / empty / contained no typed entries — there is nothing to
forward in that case\)\. On failure — a fully\-formed [OidcError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.OidcError 'Abblix\.Oidc\.Server\.Common\.OidcError') with
`error = invalid_authorization_details` \(RFC 9396 §5\) and the rejection
description; the endpoint adapter forwards it as\-is when its error type is
[OidcError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.OidcError 'Abblix\.Oidc\.Server\.Common\.OidcError'), or re\-wraps the description otherwise\.

### Remarks
The returned [System\.Text\.Json\.Nodes\.JsonArray](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.nodes.jsonarray 'System\.Text\.Json\.Nodes\.JsonArray') reflects the post\-validation set: when per\-type
validators leave their inputs untouched it is byte\-equivalent to the input, but when
a validator narrows / extends per RFC 9396 §5 \(e\.g\. a consent\-UI slider, an AS\-policy
cap, or canonicalisation\), the mutation surfaces here and the pipeline forwards the
post\-validation shape into `AuthorizationContext` — token emission reflects what
was actually granted, not the original request\.
