Arc4u.Standard.OAuth2.AspNetCore 8.3.0-preview03

Prefix Reserved
This is a prerelease version of Arc4u.Standard.OAuth2.AspNetCore.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Arc4u.Standard.OAuth2.AspNetCore --version 8.3.0-preview03
                    
NuGet\Install-Package Arc4u.Standard.OAuth2.AspNetCore -Version 8.3.0-preview03
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Arc4u.Standard.OAuth2.AspNetCore" Version="8.3.0-preview03" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Arc4u.Standard.OAuth2.AspNetCore" Version="8.3.0-preview03" />
                    
Directory.Packages.props
<PackageReference Include="Arc4u.Standard.OAuth2.AspNetCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Arc4u.Standard.OAuth2.AspNetCore --version 8.3.0-preview03
                    
#r "nuget: Arc4u.Standard.OAuth2.AspNetCore, 8.3.0-preview03"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Arc4u.Standard.OAuth2.AspNetCore@8.3.0-preview03
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Arc4u.Standard.OAuth2.AspNetCore&version=8.3.0-preview03&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Arc4u.Standard.OAuth2.AspNetCore&version=8.3.0-preview03&prerelease
                    
Install as a Cake Tool

Arc4u.Standard.OAuth2.AspNetCore

Core framework to integrate OAuth2 and creation of the principal in asp net core.

As it is a AspNetCore library, it is based on the Microsoft.AspNetCore.Authentication and Microsoft.AspNetCore.Authentication.OAuth libraries.

Do not use this package in other contexts than AspNetCore.

ProblemDetails extension

When working with the Results feature in Arc4u, the Rest Api controller will return a ProblemDetails object when an error occurs.

The idea is from a controller endpoint to call the business layer and return the result to the client. The business layer will return a Result object that can be converted to an ActionResult object.

    return await bl.DoSomethingAsync()
                   .ToActionOkResultAsync();

Different situations, different HttpStatusCodes can be returned.

Success path:

When the call to the business layer is a success, depending on the result, different codes will be returned.

Result:

The return code is 204 NoContent.

Result<T>

The return code is 200 Ok or 201 Created.

200 Ok HTTP GET

What to return when the value is null?
On internet, it is not clear what to return when the value is null. Some say to return a 204 NoContent, others say to return a 200 OK with a null value.
I find personaly than returning a 204 NoContent is more appropriate. The client knows that the call was successful but there is no content to return.

If you are using proxy code generator like NSwagStudio, this situation is not managed like I would expect. If you return a 200 Ok when you have a value and a 204 NoContent when the value is null, the proxy code generator will return the value when there is a value but will manage the 204 NoContent as an error! To avoid this today, I return a 200 Ok with a null value. The client will have to manage the null value.

It is possible to override the default behavior by informing the extension method to return another code when the value is null.

    return await bl.DoSomethingAsync(id)
                   .ToActionResultAsync(() => StatusCode(StatusCodes.Status204NoContent));

Mapping to a Dto is also possible. The mapper is a function and can be AutoMapper or any other mapper.

    return await bl.DoSomethingAsync(id)
                   .ToActionResultAsync(mapper.Map<ContractDto>);
201 Created HTTP POST

When the result is a 201 Created, the location header is set to the location of the created resource.

To handle this specific situation, the extension method ToActionCreatedResultAsync is available. The method expect a Uri to set the location correctly.
The need to split the call in two steps is to allow the business layer to return the result and the controller to set the location header.
If you do this in one step, the location is captured when the fluent Api is built and the location will never be updated when the ToActionCreatedResultAction is called!


        Uri? location = null;

        var result = await bl.DoSomethingAsync(dto, cancellation)
                                         .OnSuccess((contract) => location = new Uri(Url.ActionLink("GetById", "Contract", new { id = contract.Id })!))
                                         .ConfigureAwait(false);

        return await result.ToActionCreatedResultAsync(location, mapper.Map<ContractDto>)
                           .ConfigureAwait(false);

Error path:

When an error occurs, the business layer will return a Result object with the error information.

Different cases could happen:

  • An exception was thrown.
  • A validation error occured.
  • A Problem occured.
Exception

When an exception is thrown, a 500 InternalServerError is returned with a ProblemDetails message explaining that the exception is log with an activyId. There is no more explanation about the exception to avoid leaking information.

Validation error

When some parameters or Dto is given to a controller, code will validate the inputs.
If the validation fails, a 422 UnprocessableEntity is returned with a ValidationProblemDetails message explaining the validation errors.
The code of the validation error is used to categorrized the errors (they are grouped by code).

Problem

When a problemDetailError is returned, a 500 InternalServerError is returned with a ProblemDetails message explaining the error when no specific StatusCode is given.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Arc4u.Standard.OAuth2.AspNetCore:

Package Downloads
Arc4u.Standard.OAuth2.AspNetCore.Msal

Core Framework used in AspNetCore to authenticate user based on Msal.

Arc4u.Standard.OAuth2.AspNetCore.Authentication

Package Description

Arc4u.Standard.OAuth2.AspNetCore.Adal

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
8.3.2 87 7/18/2025
8.3.2-preview08 296 6/11/2025
8.3.2-preview07 292 6/10/2025
8.3.2-preview06 148 6/3/2025
8.3.2-preview05 81 5/31/2025
8.3.2-preview04 116 5/25/2025
8.3.2-preview03 242 5/13/2025
8.3.2-preview02 149 5/10/2025
8.3.2-preview01 179 5/7/2025
8.3.1 198 5/5/2025
8.3.0 173 5/4/2025
8.3.0-preview04 103 5/3/2025
8.3.0-preview03 110 2/15/2025
8.3.0-preview02 117 11/14/2024
8.3.0-preview01 178 8/30/2024
8.2.1 802 11/10/2024
8.2.1-preview01 153 11/9/2024
8.2.0 1,494 8/16/2024
8.2.0-preview31 178 8/16/2024
8.2.0-preview30 200 8/1/2024
8.2.0-preview29 111 7/25/2024
8.2.0-preview28 112 7/25/2024
8.2.0-preview27 179 6/28/2024
8.2.0-preview26 186 6/27/2024
8.2.0-preview25 171 6/26/2024
8.2.0-preview24 173 6/9/2024
8.2.0-preview23 266 5/29/2024
8.2.0-preview22 194 5/26/2024
8.2.0-preview21 170 5/22/2024
8.2.0-preview20 187 5/19/2024
8.2.0-preview19 140 5/18/2024
8.2.0-preview18 135 5/12/2024
8.2.0-preview17 123 5/12/2024
8.2.0-preview16 126 5/12/2024
8.2.0-preview15 132 5/11/2024
8.2.0-preview14 132 5/10/2024
8.2.0-preview13 130 5/9/2024
8.2.0-preview12 173 5/8/2024
8.2.0-preview11 185 5/7/2024
8.2.0-preview10 162 5/5/2024
8.2.0-preview09 166 5/4/2024
8.2.0-preview08 147 4/25/2024
8.2.0-preview07 178 4/23/2024
8.2.0-preview06 168 4/23/2024
8.2.0-preview05 159 4/21/2024
8.2.0-preview04 152 4/20/2024
8.2.0-preview03 140 4/17/2024
8.2.0-preview02 175 4/12/2024
8.2.0-preview01 185 4/11/2024
8.1.0 2,464 2/7/2024
8.1.0-preview10 159 2/6/2024
8.1.0-preview09 158 1/29/2024
8.1.0-preview08 206 1/9/2024
8.1.0-preview07 204 12/31/2023
8.1.0-preview06 170 12/30/2023
8.1.0-preview05 178 12/24/2023
8.1.0-preview04 161 12/23/2023
8.1.0-preview03 163 12/20/2023
8.1.0-preview02 190 12/20/2023
8.1.0-preview01 179 12/19/2023
8.0.0 281 12/15/2023
8.0.0-preview01 181 12/14/2023
6.1.22.1-preview06 215 11/25/2023
6.1.22.1-preview05 156 11/24/2023
6.1.22.1-preview04 189 11/20/2023
6.1.22.1-preview03 195 11/17/2023
6.1.22.1-preview02 148 11/17/2023
6.1.22.1-preview01 137 11/16/2023
6.1.21.1-preview04 163 10/10/2023
6.1.21.1-preview03 124 10/10/2023
6.1.21.1-preview02 131 10/5/2023
6.1.21.1-preview01 124 9/21/2023
6.1.20.1-preview03 147 8/31/2023
6.1.20.1-preview02 232 8/14/2023
6.1.20.1-preview01 204 8/13/2023
6.1.18.1 879 8/18/2023
6.0.14.3-preview56 206 8/7/2023
6.0.14.3-preview55 184 8/4/2023
6.0.14.3-preview54 223 8/3/2023
6.0.14.3-preview53 225 8/1/2023
6.0.14.3-preview52 225 7/26/2023
6.0.14.3-preview51 235 7/26/2023
6.0.14.3-preview50 229 7/19/2023
6.0.14.3-preview49 209 7/19/2023
6.0.14.3-preview48 236 7/12/2023
6.0.14.3-preview47 217 7/6/2023
6.0.14.3-preview46 220 7/3/2023
6.0.14.3-preview45 210 6/24/2023
6.0.14.3-preview44 227 6/18/2023
6.0.14.3-preview43 201 6/18/2023
6.0.14.3-preview42 208 6/14/2023
6.0.14.3-preview41 228 6/12/2023
6.0.14.3-preview40 213 6/9/2023
6.0.14.3-preview39 211 6/8/2023
6.0.14.3-preview38 212 5/30/2023
6.0.14.3-preview37 242 5/29/2023
6.0.14.3-preview36 237 5/26/2023
6.0.14.3-preview35 229 5/23/2023
6.0.14.3-preview34 209 5/22/2023
6.0.14.3-preview33 240 5/19/2023
6.0.14.3-preview32 232 5/19/2023
6.0.14.3-preview31 220 5/18/2023
6.0.14.3-preview30 220 5/12/2023
6.0.14.3-preview29 222 5/12/2023
6.0.14.3-preview28 226 5/10/2023
6.0.14.3-preview27 242 5/8/2023
6.0.14.3-preview26 248 5/7/2023
6.0.14.3-preview25 235 5/3/2023
6.0.14.3-preview24 237 4/29/2023
6.0.14.3-preview23 245 4/28/2023
6.0.14.3-preview22 221 4/27/2023
6.0.14.3-preview21 229 4/26/2023
6.0.14.3-preview20 237 4/24/2023
6.0.14.3-preview19 241 4/18/2023
6.0.14.3-preview18 237 4/17/2023
6.0.14.3-preview17 258 4/16/2023
6.0.14.3-preview16 209 4/14/2023
6.0.14.3-preview15 248 4/14/2023
6.0.14.3-preview14 225 4/11/2023
6.0.14.3-preview13 278 4/3/2023
6.0.14.3-preview12 226 4/1/2023
6.0.14.3-preview11 240 4/1/2023
6.0.14.3-preview10 237 3/30/2023
6.0.14.3-preview09 226 3/29/2023
6.0.14.3-preview08 266 3/25/2023
6.0.14.3-preview07 248 3/24/2023
6.0.14.3-preview06 245 3/19/2023
6.0.14.3-preview05 236 3/17/2023
6.0.14.3-preview04 218 3/15/2023
6.0.14.3-preview03 199 3/15/2023
6.0.14.3-preview02 237 3/14/2023
6.0.14.3-preview01 212 3/11/2023
6.0.14.2 1,634 3/8/2023
6.0.14.2-preview02 236 3/4/2023
6.0.14.2-preview01 215 3/3/2023
6.0.14.1 471 2/17/2023
6.0.14.1-preview02 246 2/16/2023
6.0.14.1-preview01 238 2/15/2023
6.0.13.1 455 2/15/2023
6.0.12.1 476 2/15/2023
6.0.11.2 467 2/15/2023
6.0.11.2-preview03 219 2/14/2023
6.0.11.2-preview02 235 2/13/2023
6.0.11.2-preview01 230 2/12/2023
6.0.11.1 3,317 1/11/2023
6.0.11.1-preview11 236 1/10/2023
6.0.11.1-preview10 228 1/10/2023
6.0.11.1-preview09 274 1/8/2023
6.0.11.1-preview08 255 1/4/2023
6.0.11.1-preview07 247 1/3/2023
6.0.11.1-preview06 231 1/3/2023
6.0.11.1-preview05 242 1/2/2023
6.0.11.1-preview04 222 1/2/2023
6.0.11.1-preview03 205 12/10/2022
6.0.11.1-preview02 209 11/15/2022
6.0.11.1-preview01 340 11/11/2022
6.0.9.3 3,167 11/8/2022
6.0.9.2 782 9/27/2022
6.0.9.1 4,306 9/17/2022
6.0.8.4 686 11/8/2022
6.0.8.3 828 9/27/2022
6.0.8.2 682 9/16/2022
6.0.8.1 664 9/7/2022
6.0.8.1-preview02 218 9/5/2022
6.0.8.1-preview01 249 8/18/2022
6.0.6.1-preview03 286 6/25/2022
6.0.6.1-preview02 261 6/15/2022
6.0.6.1-preview01 224 6/15/2022
6.0.5.1-preview01 501 5/10/2022
6.0.4.1-preview04 267 5/7/2022
6.0.4.1-preview03 277 4/27/2022
6.0.4.1-preview02 250 4/27/2022
6.0.4.1-preview01 252 4/24/2022
5.0.17.3 761 9/19/2022
5.0.17.3-preview01 287 9/16/2022
5.0.17.2 712 9/1/2022
5.0.17.2-preview07 238 8/29/2022
5.0.17.2-preview06 239 8/24/2022
5.0.17.2-preview05 233 8/24/2022
5.0.17.2-preview04 214 8/23/2022
5.0.17.2-preview03 233 8/22/2022
5.0.17.2-preview02 221 8/22/2022
5.0.17.2-preview01 237 8/17/2022
5.0.17.1 759 5/30/2022
5.0.16.1 764 5/7/2022
5.0.16.1-preview02 283 4/17/2022
5.0.16.1-preview01 258 4/14/2022
5.0.15.1-preview07 281 4/2/2022
5.0.15.1-preview06 247 4/1/2022
5.0.15.1-preview05 248 3/30/2022
5.0.15.1-preview04 275 3/27/2022
5.0.15.1-preview03 256 3/18/2022
5.0.15.1-preview02 275 3/13/2022
5.0.15.1-preview01 267 3/13/2022
5.0.14.1-preview9 250 3/1/2022
5.0.14.1-preview7 251 2/23/2022
5.0.14.1-preview6 274 2/20/2022
5.0.14.1-preview5 260 2/20/2022
5.0.14.1-preview4 254 2/19/2022
5.0.14.1-preview3 271 2/19/2022
5.0.14.1-preview2 265 2/10/2022
5.0.14.1-preview13 233 3/11/2022
5.0.14.1-preview12 274 3/9/2022
5.0.14.1-preview11 275 3/7/2022
5.0.14.1-preview10 274 3/2/2022
5.0.14.1-preview1 261 2/9/2022
5.0.13.1-preview4 285 1/30/2022
5.0.13.1-preview3 275 1/29/2022
5.0.13.1-preview2 280 1/29/2022
5.0.13.1-preview1 270 1/29/2022
5.0.11.2 2,247 10/20/2021
5.0.11.2-preview1 348 10/19/2021
5.0.11.1 579 10/19/2021
5.0.11.1-preview4 311 10/19/2021
5.0.11.1-preview3 368 10/18/2021
5.0.11.1-preview2 374 10/17/2021
5.0.11.1-preview1 348 10/16/2021
5.0.10.3 602 9/30/2021
5.0.10.2 652 9/30/2021
5.0.10.1 598 9/28/2021
5.0.9.1-preview1 317 9/1/2021
5.0.8.2 435 8/19/2021
5.0.8.1 464 8/11/2021
5.0.6.4 498 7/13/2021
5.0.6.3 988 7/10/2021
5.0.6.2 454 7/7/2021
5.0.6.1 911 6/29/2021
5.0.6.1-rc16 349 6/21/2021
5.0.6.1-rc15 346 6/20/2021
5.0.6 2,128 5/21/2021
5.0.5 510 5/21/2021
1.0.0 197 5/18/2024