Arc4u.Standard.OAuth2.AspNetCore 8.2.0-preview31

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.2.0-preview31
                    
NuGet\Install-Package Arc4u.Standard.OAuth2.AspNetCore -Version 8.2.0-preview31
                    
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.2.0-preview31" />
                    
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.2.0-preview31" />
                    
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.2.0-preview31
                    
#r "nuget: Arc4u.Standard.OAuth2.AspNetCore, 8.2.0-preview31"
                    
#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.2.0-preview31
                    
#: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.2.0-preview31&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Arc4u.Standard.OAuth2.AspNetCore&version=8.2.0-preview31&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 net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  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 was computed.  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 76 7/18/2025
8.3.2-preview08 291 6/11/2025
8.3.2-preview07 288 6/10/2025
8.3.2-preview06 142 6/3/2025
8.3.2-preview05 76 5/31/2025
8.3.2-preview04 110 5/25/2025
8.3.2-preview03 238 5/13/2025
8.3.2-preview02 144 5/10/2025
8.3.2-preview01 173 5/7/2025
8.3.1 192 5/5/2025
8.3.0 166 5/4/2025
8.3.0-preview04 99 5/3/2025
8.3.0-preview03 106 2/15/2025
8.3.0-preview02 112 11/14/2024
8.3.0-preview01 173 8/30/2024
8.2.1 791 11/10/2024
8.2.1-preview01 148 11/9/2024
8.2.0 1,463 8/16/2024
8.2.0-preview31 173 8/16/2024
8.2.0-preview30 195 8/1/2024
8.2.0-preview29 107 7/25/2024
8.2.0-preview28 108 7/25/2024
8.2.0-preview27 175 6/28/2024
8.2.0-preview26 181 6/27/2024
8.2.0-preview25 167 6/26/2024
8.2.0-preview24 168 6/9/2024
8.2.0-preview23 261 5/29/2024
8.2.0-preview22 190 5/26/2024
8.2.0-preview21 166 5/22/2024
8.2.0-preview20 183 5/19/2024
8.2.0-preview19 136 5/18/2024
8.2.0-preview18 131 5/12/2024
8.2.0-preview17 119 5/12/2024
8.2.0-preview16 122 5/12/2024
8.2.0-preview15 125 5/11/2024
8.2.0-preview14 128 5/10/2024
8.2.0-preview13 123 5/9/2024
8.2.0-preview12 168 5/8/2024
8.2.0-preview11 180 5/7/2024
8.2.0-preview10 158 5/5/2024
8.2.0-preview09 163 5/4/2024
8.2.0-preview08 142 4/25/2024
8.2.0-preview07 174 4/23/2024
8.2.0-preview06 163 4/23/2024
8.2.0-preview05 154 4/21/2024
8.2.0-preview04 148 4/20/2024
8.2.0-preview03 133 4/17/2024
8.2.0-preview02 170 4/12/2024
8.2.0-preview01 180 4/11/2024
8.1.0 2,407 2/7/2024
8.1.0-preview10 155 2/6/2024
8.1.0-preview09 153 1/29/2024
8.1.0-preview08 202 1/9/2024
8.1.0-preview07 200 12/31/2023
8.1.0-preview06 166 12/30/2023
8.1.0-preview05 175 12/24/2023
8.1.0-preview04 158 12/23/2023
8.1.0-preview03 160 12/20/2023
8.1.0-preview02 177 12/20/2023
8.1.0-preview01 176 12/19/2023
8.0.0 275 12/15/2023
8.0.0-preview01 178 12/14/2023
6.1.22.1-preview06 212 11/25/2023
6.1.22.1-preview05 153 11/24/2023
6.1.22.1-preview04 186 11/20/2023
6.1.22.1-preview03 188 11/17/2023
6.1.22.1-preview02 144 11/17/2023
6.1.22.1-preview01 133 11/16/2023
6.1.21.1-preview04 155 10/10/2023
6.1.21.1-preview03 120 10/10/2023
6.1.21.1-preview02 125 10/5/2023
6.1.21.1-preview01 119 9/21/2023
6.1.20.1-preview03 137 8/31/2023
6.1.20.1-preview02 221 8/14/2023
6.1.20.1-preview01 194 8/13/2023
6.1.18.1 867 8/18/2023
6.0.14.3-preview56 195 8/7/2023
6.0.14.3-preview55 174 8/4/2023
6.0.14.3-preview54 213 8/3/2023
6.0.14.3-preview53 209 8/1/2023
6.0.14.3-preview52 215 7/26/2023
6.0.14.3-preview51 225 7/26/2023
6.0.14.3-preview50 217 7/19/2023
6.0.14.3-preview49 197 7/19/2023
6.0.14.3-preview48 223 7/12/2023
6.0.14.3-preview47 206 7/6/2023
6.0.14.3-preview46 209 7/3/2023
6.0.14.3-preview45 199 6/24/2023
6.0.14.3-preview44 216 6/18/2023
6.0.14.3-preview43 189 6/18/2023
6.0.14.3-preview42 196 6/14/2023
6.0.14.3-preview41 214 6/12/2023
6.0.14.3-preview40 201 6/9/2023
6.0.14.3-preview39 198 6/8/2023
6.0.14.3-preview38 200 5/30/2023
6.0.14.3-preview37 230 5/29/2023
6.0.14.3-preview36 225 5/26/2023
6.0.14.3-preview35 217 5/23/2023
6.0.14.3-preview34 197 5/22/2023
6.0.14.3-preview33 226 5/19/2023
6.0.14.3-preview32 219 5/19/2023
6.0.14.3-preview31 208 5/18/2023
6.0.14.3-preview30 208 5/12/2023
6.0.14.3-preview29 209 5/12/2023
6.0.14.3-preview28 212 5/10/2023
6.0.14.3-preview27 230 5/8/2023
6.0.14.3-preview26 236 5/7/2023
6.0.14.3-preview25 221 5/3/2023
6.0.14.3-preview24 224 4/29/2023
6.0.14.3-preview23 233 4/28/2023
6.0.14.3-preview22 209 4/27/2023
6.0.14.3-preview21 214 4/26/2023
6.0.14.3-preview20 224 4/24/2023
6.0.14.3-preview19 226 4/18/2023
6.0.14.3-preview18 223 4/17/2023
6.0.14.3-preview17 245 4/16/2023
6.0.14.3-preview16 195 4/14/2023
6.0.14.3-preview15 235 4/14/2023
6.0.14.3-preview14 212 4/11/2023
6.0.14.3-preview13 265 4/3/2023
6.0.14.3-preview12 214 4/1/2023
6.0.14.3-preview11 226 4/1/2023
6.0.14.3-preview10 224 3/30/2023
6.0.14.3-preview09 213 3/29/2023
6.0.14.3-preview08 254 3/25/2023
6.0.14.3-preview07 235 3/24/2023
6.0.14.3-preview06 232 3/19/2023
6.0.14.3-preview05 223 3/17/2023
6.0.14.3-preview04 206 3/15/2023
6.0.14.3-preview03 187 3/15/2023
6.0.14.3-preview02 225 3/14/2023
6.0.14.3-preview01 200 3/11/2023
6.0.14.2 1,605 3/8/2023
6.0.14.2-preview02 222 3/4/2023
6.0.14.2-preview01 202 3/3/2023
6.0.14.1 458 2/17/2023
6.0.14.1-preview02 232 2/16/2023
6.0.14.1-preview01 223 2/15/2023
6.0.13.1 442 2/15/2023
6.0.12.1 464 2/15/2023
6.0.11.2 455 2/15/2023
6.0.11.2-preview03 207 2/14/2023
6.0.11.2-preview02 221 2/13/2023
6.0.11.2-preview01 216 2/12/2023
6.0.11.1 3,289 1/11/2023
6.0.11.1-preview11 221 1/10/2023
6.0.11.1-preview10 214 1/10/2023
6.0.11.1-preview09 262 1/8/2023
6.0.11.1-preview08 243 1/4/2023
6.0.11.1-preview07 235 1/3/2023
6.0.11.1-preview06 218 1/3/2023
6.0.11.1-preview05 229 1/2/2023
6.0.11.1-preview04 210 1/2/2023
6.0.11.1-preview03 193 12/10/2022
6.0.11.1-preview02 198 11/15/2022
6.0.11.1-preview01 329 11/11/2022
6.0.9.3 3,156 11/8/2022
6.0.9.2 772 9/27/2022
6.0.9.1 4,295 9/17/2022
6.0.8.4 676 11/8/2022
6.0.8.3 818 9/27/2022
6.0.8.2 670 9/16/2022
6.0.8.1 653 9/7/2022
6.0.8.1-preview02 206 9/5/2022
6.0.8.1-preview01 238 8/18/2022
6.0.6.1-preview03 276 6/25/2022
6.0.6.1-preview02 251 6/15/2022
6.0.6.1-preview01 213 6/15/2022
6.0.5.1-preview01 490 5/10/2022
6.0.4.1-preview04 256 5/7/2022
6.0.4.1-preview03 267 4/27/2022
6.0.4.1-preview02 239 4/27/2022
6.0.4.1-preview01 240 4/24/2022
5.0.17.3 751 9/19/2022
5.0.17.3-preview01 275 9/16/2022
5.0.17.2 702 9/1/2022
5.0.17.2-preview07 227 8/29/2022
5.0.17.2-preview06 227 8/24/2022
5.0.17.2-preview05 223 8/24/2022
5.0.17.2-preview04 199 8/23/2022
5.0.17.2-preview03 223 8/22/2022
5.0.17.2-preview02 211 8/22/2022
5.0.17.2-preview01 226 8/17/2022
5.0.17.1 748 5/30/2022
5.0.16.1 754 5/7/2022
5.0.16.1-preview02 272 4/17/2022
5.0.16.1-preview01 246 4/14/2022
5.0.15.1-preview07 270 4/2/2022
5.0.15.1-preview06 237 4/1/2022
5.0.15.1-preview05 238 3/30/2022
5.0.15.1-preview04 262 3/27/2022
5.0.15.1-preview03 244 3/18/2022
5.0.15.1-preview02 265 3/13/2022
5.0.15.1-preview01 256 3/13/2022
5.0.14.1-preview9 239 3/1/2022
5.0.14.1-preview7 239 2/23/2022
5.0.14.1-preview6 263 2/20/2022
5.0.14.1-preview5 249 2/20/2022
5.0.14.1-preview4 244 2/19/2022
5.0.14.1-preview3 261 2/19/2022
5.0.14.1-preview2 255 2/10/2022
5.0.14.1-preview13 223 3/11/2022
5.0.14.1-preview12 262 3/9/2022
5.0.14.1-preview11 265 3/7/2022
5.0.14.1-preview10 261 3/2/2022
5.0.14.1-preview1 250 2/9/2022
5.0.13.1-preview4 274 1/30/2022
5.0.13.1-preview3 265 1/29/2022
5.0.13.1-preview2 269 1/29/2022
5.0.13.1-preview1 260 1/29/2022
5.0.11.2 2,236 10/20/2021
5.0.11.2-preview1 338 10/19/2021
5.0.11.1 569 10/19/2021
5.0.11.1-preview4 300 10/19/2021
5.0.11.1-preview3 358 10/18/2021
5.0.11.1-preview2 363 10/17/2021
5.0.11.1-preview1 337 10/16/2021
5.0.10.3 592 9/30/2021
5.0.10.2 643 9/30/2021
5.0.10.1 587 9/28/2021
5.0.9.1-preview1 307 9/1/2021
5.0.8.2 424 8/19/2021
5.0.8.1 454 8/11/2021
5.0.6.4 486 7/13/2021
5.0.6.3 978 7/10/2021
5.0.6.2 444 7/7/2021
5.0.6.1 900 6/29/2021
5.0.6.1-rc16 338 6/21/2021
5.0.6.1-rc15 335 6/20/2021
5.0.6 2,117 5/21/2021
5.0.5 499 5/21/2021
1.0.0 191 5/18/2024