Prodest.AuthNZ
6.0.10
dotnet add package Prodest.AuthNZ --version 6.0.10
NuGet\Install-Package Prodest.AuthNZ -Version 6.0.10
<PackageReference Include="Prodest.AuthNZ" Version="6.0.10" />
paket add Prodest.AuthNZ --version 6.0.10
#r "nuget: Prodest.AuthNZ, 6.0.10"
// 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 | Versions 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. |
-
net6.0
- Microsoft.AspNetCore.Authentication.JwtBearer (>= 6.0.25)
- Microsoft.AspNetCore.DataProtection.EntityFrameworkCore (>= 6.0.25)
- Microsoft.EntityFrameworkCore.SqlServer (>= 6.0.25)
- Prodest.Common (>= 6.0.10)
- Prodest.Integrations.AcessoCidadao (>= 6.0.10)
-
net7.0
- Microsoft.AspNetCore.Authentication.JwtBearer (>= 7.0.14)
- Microsoft.AspNetCore.DataProtection.EntityFrameworkCore (>= 7.0.14)
- Microsoft.EntityFrameworkCore.SqlServer (>= 7.0.14)
- Prodest.Common (>= 6.0.10)
- Prodest.Integrations.AcessoCidadao (>= 6.0.10)
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 |