Arc4u.Standard.OAuth2.AspNetCore 8.3.2

Prefix Reserved
dotnet add package Arc4u.Standard.OAuth2.AspNetCore --version 8.3.2
                    
NuGet\Install-Package Arc4u.Standard.OAuth2.AspNetCore -Version 8.3.2
                    
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.2" />
                    
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.2" />
                    
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.2
                    
#r "nuget: Arc4u.Standard.OAuth2.AspNetCore, 8.3.2"
                    
#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.2
                    
#: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.2
                    
Install as a Cake Addin
#tool nuget:?package=Arc4u.Standard.OAuth2.AspNetCore&version=8.3.2
                    
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 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 174 8/30/2024
8.2.1 792 11/10/2024
8.2.1-preview01 148 11/9/2024
8.2.0 1,464 8/16/2024
8.2.0-preview31 174 8/16/2024
8.2.0-preview30 196 8/1/2024
8.2.0-preview29 108 7/25/2024
8.2.0-preview28 109 7/25/2024
8.2.0-preview27 176 6/28/2024
8.2.0-preview26 182 6/27/2024
8.2.0-preview25 168 6/26/2024
8.2.0-preview24 169 6/9/2024
8.2.0-preview23 262 5/29/2024
8.2.0-preview22 191 5/26/2024
8.2.0-preview21 167 5/22/2024
8.2.0-preview20 184 5/19/2024
8.2.0-preview19 137 5/18/2024
8.2.0-preview18 132 5/12/2024
8.2.0-preview17 120 5/12/2024
8.2.0-preview16 123 5/12/2024
8.2.0-preview15 126 5/11/2024
8.2.0-preview14 129 5/10/2024
8.2.0-preview13 125 5/9/2024
8.2.0-preview12 169 5/8/2024
8.2.0-preview11 182 5/7/2024
8.2.0-preview10 159 5/5/2024
8.2.0-preview09 163 5/4/2024
8.2.0-preview08 143 4/25/2024
8.2.0-preview07 175 4/23/2024
8.2.0-preview06 164 4/23/2024
8.2.0-preview05 155 4/21/2024
8.2.0-preview04 149 4/20/2024
8.2.0-preview03 134 4/17/2024
8.2.0-preview02 171 4/12/2024
8.2.0-preview01 181 4/11/2024
8.1.0 2,407 2/7/2024
8.1.0-preview10 155 2/6/2024
8.1.0-preview09 155 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 179 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 189 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 156 10/10/2023
6.1.21.1-preview03 120 10/10/2023
6.1.21.1-preview02 126 10/5/2023
6.1.21.1-preview01 120 9/21/2023
6.1.20.1-preview03 140 8/31/2023
6.1.20.1-preview02 224 8/14/2023
6.1.20.1-preview01 197 8/13/2023
6.1.18.1 870 8/18/2023
6.0.14.3-preview56 198 8/7/2023
6.0.14.3-preview55 177 8/4/2023
6.0.14.3-preview54 216 8/3/2023
6.0.14.3-preview53 213 8/1/2023
6.0.14.3-preview52 218 7/26/2023
6.0.14.3-preview51 228 7/26/2023
6.0.14.3-preview50 221 7/19/2023
6.0.14.3-preview49 201 7/19/2023
6.0.14.3-preview48 228 7/12/2023
6.0.14.3-preview47 210 7/6/2023
6.0.14.3-preview46 213 7/3/2023
6.0.14.3-preview45 203 6/24/2023
6.0.14.3-preview44 220 6/18/2023
6.0.14.3-preview43 193 6/18/2023
6.0.14.3-preview42 200 6/14/2023
6.0.14.3-preview41 218 6/12/2023
6.0.14.3-preview40 205 6/9/2023
6.0.14.3-preview39 202 6/8/2023
6.0.14.3-preview38 204 5/30/2023
6.0.14.3-preview37 234 5/29/2023
6.0.14.3-preview36 229 5/26/2023
6.0.14.3-preview35 221 5/23/2023
6.0.14.3-preview34 201 5/22/2023
6.0.14.3-preview33 230 5/19/2023
6.0.14.3-preview32 223 5/19/2023
6.0.14.3-preview31 212 5/18/2023
6.0.14.3-preview30 212 5/12/2023
6.0.14.3-preview29 213 5/12/2023
6.0.14.3-preview28 216 5/10/2023
6.0.14.3-preview27 234 5/8/2023
6.0.14.3-preview26 240 5/7/2023
6.0.14.3-preview25 225 5/3/2023
6.0.14.3-preview24 228 4/29/2023
6.0.14.3-preview23 237 4/28/2023
6.0.14.3-preview22 213 4/27/2023
6.0.14.3-preview21 218 4/26/2023
6.0.14.3-preview20 228 4/24/2023
6.0.14.3-preview19 230 4/18/2023
6.0.14.3-preview18 227 4/17/2023
6.0.14.3-preview17 249 4/16/2023
6.0.14.3-preview16 199 4/14/2023
6.0.14.3-preview15 239 4/14/2023
6.0.14.3-preview14 216 4/11/2023
6.0.14.3-preview13 269 4/3/2023
6.0.14.3-preview12 218 4/1/2023
6.0.14.3-preview11 231 4/1/2023
6.0.14.3-preview10 228 3/30/2023
6.0.14.3-preview09 217 3/29/2023
6.0.14.3-preview08 258 3/25/2023
6.0.14.3-preview07 240 3/24/2023
6.0.14.3-preview06 236 3/19/2023
6.0.14.3-preview05 227 3/17/2023
6.0.14.3-preview04 210 3/15/2023
6.0.14.3-preview03 191 3/15/2023
6.0.14.3-preview02 229 3/14/2023
6.0.14.3-preview01 204 3/11/2023
6.0.14.2 1,609 3/8/2023
6.0.14.2-preview02 226 3/4/2023
6.0.14.2-preview01 206 3/3/2023
6.0.14.1 462 2/17/2023
6.0.14.1-preview02 236 2/16/2023
6.0.14.1-preview01 228 2/15/2023
6.0.13.1 446 2/15/2023
6.0.12.1 468 2/15/2023
6.0.11.2 459 2/15/2023
6.0.11.2-preview03 211 2/14/2023
6.0.11.2-preview02 225 2/13/2023
6.0.11.2-preview01 220 2/12/2023
6.0.11.1 3,293 1/11/2023
6.0.11.1-preview11 225 1/10/2023
6.0.11.1-preview10 218 1/10/2023
6.0.11.1-preview09 266 1/8/2023
6.0.11.1-preview08 247 1/4/2023
6.0.11.1-preview07 239 1/3/2023
6.0.11.1-preview06 222 1/3/2023
6.0.11.1-preview05 233 1/2/2023
6.0.11.1-preview04 214 1/2/2023
6.0.11.1-preview03 197 12/10/2022
6.0.11.1-preview02 200 11/15/2022
6.0.11.1-preview01 331 11/11/2022
6.0.9.3 3,158 11/8/2022
6.0.9.2 774 9/27/2022
6.0.9.1 4,297 9/17/2022
6.0.8.4 678 11/8/2022
6.0.8.3 820 9/27/2022
6.0.8.2 672 9/16/2022
6.0.8.1 655 9/7/2022
6.0.8.1-preview02 208 9/5/2022
6.0.8.1-preview01 240 8/18/2022
6.0.6.1-preview03 278 6/25/2022
6.0.6.1-preview02 253 6/15/2022
6.0.6.1-preview01 215 6/15/2022
6.0.5.1-preview01 492 5/10/2022
6.0.4.1-preview04 258 5/7/2022
6.0.4.1-preview03 269 4/27/2022
6.0.4.1-preview02 241 4/27/2022
6.0.4.1-preview01 242 4/24/2022
5.0.17.3 753 9/19/2022
5.0.17.3-preview01 278 9/16/2022
5.0.17.2 704 9/1/2022
5.0.17.2-preview07 229 8/29/2022
5.0.17.2-preview06 230 8/24/2022
5.0.17.2-preview05 225 8/24/2022
5.0.17.2-preview04 201 8/23/2022
5.0.17.2-preview03 225 8/22/2022
5.0.17.2-preview02 213 8/22/2022
5.0.17.2-preview01 228 8/17/2022
5.0.17.1 750 5/30/2022
5.0.16.1 756 5/7/2022
5.0.16.1-preview02 274 4/17/2022
5.0.16.1-preview01 248 4/14/2022
5.0.15.1-preview07 272 4/2/2022
5.0.15.1-preview06 239 4/1/2022
5.0.15.1-preview05 240 3/30/2022
5.0.15.1-preview04 264 3/27/2022
5.0.15.1-preview03 246 3/18/2022
5.0.15.1-preview02 267 3/13/2022
5.0.15.1-preview01 259 3/13/2022
5.0.14.1-preview9 241 3/1/2022
5.0.14.1-preview7 241 2/23/2022
5.0.14.1-preview6 265 2/20/2022
5.0.14.1-preview5 251 2/20/2022
5.0.14.1-preview4 246 2/19/2022
5.0.14.1-preview3 263 2/19/2022
5.0.14.1-preview2 257 2/10/2022
5.0.14.1-preview13 225 3/11/2022
5.0.14.1-preview12 264 3/9/2022
5.0.14.1-preview11 267 3/7/2022
5.0.14.1-preview10 263 3/2/2022
5.0.14.1-preview1 252 2/9/2022
5.0.13.1-preview4 276 1/30/2022
5.0.13.1-preview3 267 1/29/2022
5.0.13.1-preview2 271 1/29/2022
5.0.13.1-preview1 262 1/29/2022
5.0.11.2 2,238 10/20/2021
5.0.11.2-preview1 340 10/19/2021
5.0.11.1 571 10/19/2021
5.0.11.1-preview4 302 10/19/2021
5.0.11.1-preview3 360 10/18/2021
5.0.11.1-preview2 366 10/17/2021
5.0.11.1-preview1 339 10/16/2021
5.0.10.3 594 9/30/2021
5.0.10.2 645 9/30/2021
5.0.10.1 589 9/28/2021
5.0.9.1-preview1 309 9/1/2021
5.0.8.2 426 8/19/2021
5.0.8.1 456 8/11/2021
5.0.6.4 488 7/13/2021
5.0.6.3 980 7/10/2021
5.0.6.2 446 7/7/2021
5.0.6.1 902 6/29/2021
5.0.6.1-rc16 340 6/21/2021
5.0.6.1-rc15 337 6/20/2021
5.0.6 2,119 5/21/2021
5.0.5 501 5/21/2021
1.0.0 192 5/18/2024