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

## AuthorizationCodeBuilder Class

Builds the `code` response\-type component of an authorization endpoint success
response — the Authorization Code Flow contributor\. Generates an authorization code via
[IAuthorizationCodeService](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.Storages.IAuthorizationCodeService 'Abblix\.Oidc\.Server\.Features\.Storages\.IAuthorizationCodeService') and stores it on the running
[SuccessfullyAuthenticated](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated 'Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.SuccessfullyAuthenticated') result\. Registered by default through
`AddAuthorizationEndpoint()`; covers the OAuth 2\.1 \(draft\) recommended flow\. Declares
`authorization_code` in [GrantTypesSupported](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.GrantTypesSupported 'Abblix\.Oidc\.Server\.Endpoints\.Authorization\.AuthorizationCodeBuilder\.GrantTypesSupported') so the discovery
endpoint and registration\-time gates aggregate it transparently\.

```csharp
public class AuthorizationCodeBuilder : Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.IAuthorizationResponseBuilder, Abblix.Oidc.Server.Common.Interfaces.IGrantTypeInformer
```

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

Implements [IAuthorizationResponseBuilder](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.IAuthorizationResponseBuilder 'Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.IAuthorizationResponseBuilder'), [IGrantTypeInformer](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Interfaces.IGrantTypeInformer 'Abblix\.Oidc\.Server\.Common\.Interfaces\.IGrantTypeInformer')
### Constructors

## AuthorizationCodeBuilder\(IAuthorizationCodeService, IAuthorizationValueReuseDetector\) Constructor {#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.AuthorizationCodeBuilder(Abblix.Oidc.Server.Features.Storages.IAuthorizationCodeService,Abblix.Oidc.Server.Features.ReusePrevention.IAuthorizationValueReuseDetector)}

Builds the `code` response\-type component of an authorization endpoint success
response — the Authorization Code Flow contributor\. Generates an authorization code via
[IAuthorizationCodeService](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.Storages.IAuthorizationCodeService 'Abblix\.Oidc\.Server\.Features\.Storages\.IAuthorizationCodeService') and stores it on the running
[SuccessfullyAuthenticated](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated 'Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.SuccessfullyAuthenticated') result\. Registered by default through
`AddAuthorizationEndpoint()`; covers the OAuth 2\.1 \(draft\) recommended flow\. Declares
`authorization_code` in [GrantTypesSupported](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.GrantTypesSupported 'Abblix\.Oidc\.Server\.Endpoints\.Authorization\.AuthorizationCodeBuilder\.GrantTypesSupported') so the discovery
endpoint and registration\-time gates aggregate it transparently\.

```csharp
public AuthorizationCodeBuilder(Abblix.Oidc.Server.Features.Storages.IAuthorizationCodeService authorizationCodeService, Abblix.Oidc.Server.Features.ReusePrevention.IAuthorizationValueReuseDetector reuseDetector);
```
#### Parameters

###### `authorizationCodeService` [IAuthorizationCodeService](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.Storages.IAuthorizationCodeService 'Abblix\.Oidc\.Server\.Features\.Storages\.IAuthorizationCodeService') {#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.AuthorizationCodeBuilder(Abblix.Oidc.Server.Features.Storages.IAuthorizationCodeService,Abblix.Oidc.Server.Features.ReusePrevention.IAuthorizationValueReuseDetector).authorizationCodeService}

###### `reuseDetector` [IAuthorizationValueReuseDetector](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.ReusePrevention.IAuthorizationValueReuseDetector 'Abblix\.Oidc\.Server\.Features\.ReusePrevention\.IAuthorizationValueReuseDetector') {#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.AuthorizationCodeBuilder(Abblix.Oidc.Server.Features.Storages.IAuthorizationCodeService,Abblix.Oidc.Server.Features.ReusePrevention.IAuthorizationValueReuseDetector).reuseDetector}
### Properties

## AuthorizationCodeBuilder\.GrantTypesSupported Property {#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.GrantTypesSupported}

The grant types supported by this component, as defined in OAuth 2\.0 and OpenID Connect specifications\.

```csharp
public System.Collections.Generic.IEnumerable<string> GrantTypesSupported { get; }
```

Implements [GrantTypesSupported](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Interfaces.IGrantTypeInformer#Abblix.Oidc.Server.Common.Interfaces.IGrantTypeInformer.GrantTypesSupported 'Abblix\.Oidc\.Server\.Common\.Interfaces\.IGrantTypeInformer\.GrantTypesSupported')

#### Property Value
[System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')

### Remarks
Common grant types include:
- "authorization_code" - Authorization Code Grant
- "implicit" - Implicit Grant
- "refresh_token" - Refresh Token Grant
- "client_credentials" - Client Credentials Grant
- "password" - Resource Owner Password Credentials Grant

## AuthorizationCodeBuilder\.ResponseType Property {#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.ResponseType}

The single OAuth 2\.0 / OIDC response\-type value this processor is responsible for, matched
case\-sensitively against parts of the request's `response_type`\.

```csharp
public string ResponseType { get; }
```

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

#### Property Value
[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')
### Methods

## AuthorizationCodeBuilder\.BuildResponseAsync\(ValidAuthorizationRequest, AuthorizedGrant, SuccessfullyAuthenticated\) Method {#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.BuildResponseAsync(Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.ValidAuthorizationRequest,Abblix.Oidc.Server.Endpoints.Token.Interfaces.AuthorizedGrant,Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated)}

Populates the relevant field on [result](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.BuildResponseAsync(Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.ValidAuthorizationRequest,Abblix.Oidc.Server.Endpoints.Token.Interfaces.AuthorizedGrant,Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated).result 'Abblix\.Oidc\.Server\.Endpoints\.Authorization\.AuthorizationCodeBuilder\.BuildResponseAsync\(Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.ValidAuthorizationRequest, Abblix\.Oidc\.Server\.Endpoints\.Token\.Interfaces\.AuthorizedGrant, Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.SuccessfullyAuthenticated\)\.result') for this processor's response type\.
Implementations mutate [result](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.BuildResponseAsync(Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.ValidAuthorizationRequest,Abblix.Oidc.Server.Endpoints.Token.Interfaces.AuthorizedGrant,Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated).result 'Abblix\.Oidc\.Server\.Endpoints\.Authorization\.AuthorizationCodeBuilder\.BuildResponseAsync\(Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.ValidAuthorizationRequest, Abblix\.Oidc\.Server\.Endpoints\.Token\.Interfaces\.AuthorizedGrant, Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.SuccessfullyAuthenticated\)\.result') in place and may read fields populated by
processors that ran earlier in the canonical iteration order
\(`code` before `token` before `id_token`\)\.

```csharp
public System.Threading.Tasks.Task BuildResponseAsync(Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.ValidAuthorizationRequest request, Abblix.Oidc.Server.Endpoints.Token.Interfaces.AuthorizedGrant authorizedGrant, Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated result);
```
#### Parameters

###### `request` [ValidAuthorizationRequest](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.ValidAuthorizationRequest 'Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.ValidAuthorizationRequest') {#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.BuildResponseAsync(Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.ValidAuthorizationRequest,Abblix.Oidc.Server.Endpoints.Token.Interfaces.AuthorizedGrant,Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated).request}

###### `authorizedGrant` [AuthorizedGrant](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Token.Interfaces.AuthorizedGrant 'Abblix\.Oidc\.Server\.Endpoints\.Token\.Interfaces\.AuthorizedGrant') {#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.BuildResponseAsync(Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.ValidAuthorizationRequest,Abblix.Oidc.Server.Endpoints.Token.Interfaces.AuthorizedGrant,Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated).authorizedGrant}

###### `result` [SuccessfullyAuthenticated](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated 'Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.SuccessfullyAuthenticated') {#Abblix.Oidc.Server.Endpoints.Authorization.AuthorizationCodeBuilder.BuildResponseAsync(Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.ValidAuthorizationRequest,Abblix.Oidc.Server.Endpoints.Token.Interfaces.AuthorizedGrant,Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated).result}

Implements [BuildResponseAsync\(ValidAuthorizationRequest, AuthorizedGrant, SuccessfullyAuthenticated\)](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.IAuthorizationResponseBuilder#Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.IAuthorizationResponseBuilder.BuildResponseAsync(Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.ValidAuthorizationRequest,Abblix.Oidc.Server.Endpoints.Token.Interfaces.AuthorizedGrant,Abblix.Oidc.Server.Endpoints.Authorization.Interfaces.SuccessfullyAuthenticated) 'Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.IAuthorizationResponseBuilder\.BuildResponseAsync\(Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.ValidAuthorizationRequest, Abblix\.Oidc\.Server\.Endpoints\.Token\.Interfaces\.AuthorizedGrant, Abblix\.Oidc\.Server\.Endpoints\.Authorization\.Interfaces\.SuccessfullyAuthenticated\)')

#### Returns
[System\.Threading\.Tasks\.Task](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task 'System\.Threading\.Tasks\.Task')
