Prodest.AuthNZ 6.0.10

This package has a SemVer 2.0.0 package version: 6.0.10+20231207125921.
dotnet add package Prodest.AuthNZ --version 6.0.10                
NuGet\Install-Package Prodest.AuthNZ -Version 6.0.10                
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="Prodest.AuthNZ" Version="6.0.10" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Prodest.AuthNZ --version 6.0.10                
#r "nuget: Prodest.AuthNZ, 6.0.10"                
#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.
// Install Prodest.AuthNZ as a Cake Addin
#addin nuget:?package=Prodest.AuthNZ&version=6.0.10

// Install Prodest.AuthNZ as a Cake Tool
#tool nuget:?package=Prodest.AuthNZ&version=6.0.10                

Prodest.AuthNZ

Sobre

Pacote com a configuração necessária para realizar a autenticação e autorização de usuários.

Como usar?

A configuração abaixo é a mais comum para uma api/webapp que precisa integrar com o login do Acesso Cidadao:

// Program.cs

var builder = WebApplication.CreateBuilder(Environment.GetCommandLineArgs());

builder.Services
    .ConfigureAuthenticationDataProtection(builder.Configuration, "SutFactory")
    .ConfigureOpenIdAuthentication(
        builder.Configuration,
        cookieDomain: "localhost",
        cookieName: "SutFactory_Cookie"
    );

builder.Services
    .ConfigureAuthorization();

builder.Services
    .InjectAcessoCidadaoIntegration(builder.Configuration);

var app = builder.Build();

await app.RunAsync();

Primeiramente precisamos configurar o DataProtection, ele é usado para criar uma chave de criptografia para proteger informações sensíveis da aplicação, como por exemplo, o cookie de autenticação. Essa configuração irá armazenar essa chave em um banco SqlServer definido na seção de ConnectionStrings do appsettings. Essa extensão precisa de um objeto IConfiguration e o nome da aplicação (para identificação da chave) passados via parâmetro, também é possível informar o nome do schema no banco de dados que irá receber a tabela que armazena as chaves, o padrão é dbo e a tabela é criada automaticamente, caso não exista.

// Program.cs

builder.Services
    .ConfigureAuthenticationDataProtection(builder.Configuration, "SutFactory"[, databaseSchema: "SchemaXYZ"])

Autenticação

A integração com o login do acesso cidadão é feita com a extensão que configura e usa o protocolo OpenId. Essa extensão também define a autenticação e configura um cookie com configurações e eventos padronizados.

// Program.cs

builder.Services
    .ConfigureOpenIdAuthentication(
        builder.Configuration,
        cookieDomain: "localhost",
        cookieName: "SutFactory_Cookie"
    );

É necessário, para o funcionamento correto, a criação de uma seção no appsettings chamada LoginWeb:

// appsettings.json

"LoginWeb": {
    "Authority": "https://acessocidadao.es.gov.br/is/",
    "ClientId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "ClientSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "GetClaimsFromUserInfoEndpoint": "true",
    "RequireHttpsMetadata": "true",
    "ResponseType": "code",
    "SaveTokens": "false",
    "Scopes": [
        "xxxxxxxx",
        "yyyyyyyy"
    ],
    "UsePkce": false
}

Autorização

Podemos definir políticas de autorização com a extensão ConfigureAuthorization:

// Program.cs

builder.Services
    .ConfigureAuthorization([policyOptions: (options, string[]) => { }]);

Essa extensão pode ser invocada sem parâmetro, onde a política padrão requer usuários autenticados, para definir políticas mais granulares, utilize a action que recebe o AuthorizationOptions e um array de string com o schema de autorização do OpenId.

Compartilhamento de cookies entre aplicações

Existem casos onde é necessário o compartilhamento do cookie de autenticação entre aplicações. Essas aplicações compartilham a mesma configuração de DataProtection, onde uma aplicação X é responsável por fazer o login com OpenId e as demais são configuradas como a mesma configuração de cookies e assim consumindo o cookie criado em outra aplicação, obtendo o efeito parecido com o de um SSO.

// Program.cs

builder.Services
    .ConfigureAuthenticationDataProtection(builder.Configuration, "AppCompartilhado")
    .ConfigureSharedCookieAuthentication(
        cookieDomain: "localhost",
        cookieName: "SutFactory_Cookie"
        [, configureCookieEvents: options => { }]
    )

Integração com o acesso cidadão

// Program.cs

builder.Services
    .InjectAcessoCidadaoIntegration(builder.Configuration);

A integração com o acesso cidadão é feita através da extensão InjectAcessoCidadaoIntegration, mais detalhes sobre a extensão estão em Integrations.AcessoCidadao.

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 is compatible.  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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
6.0.10 223 12/7/2023
6.0.9 53 11/27/2023
6.0.8 51 11/22/2023
6.0.7 37 11/21/2023
6.0.6 239 11/8/2023
6.0.2 67 10/17/2023
6.0.1 58 9/26/2023
6.0.1-preview.0.5 62 9/26/2023
6.0.1-preview.0.4 78 9/26/2023
6.0.1-preview.0.3 43 9/26/2023
6.0.1-preview.0.2 67 9/25/2023
6.0.1-preview.0.1 62 9/25/2023
6.0.1-preview.0 61 9/25/2023
6.0.0 60 9/21/2023
6.0.0-preview.0.1 59 9/21/2023