ASP .NET Web API 和 Keycloak 的验证和授权
魔多 API
Olá pessoal!
首先,请先了解如何使用 Keycloak 进行验证、授权并实现使用 Keycloak 的实用操作和性能。
有何授权和认证?
如果您经常使用应用程序的安全性,请注意与递归访问的不同之处。
- 身份验证:对使用情况进行身份验证。第一次处理所有的应用程序时,请先处理该应用程序,并验证该应用程序的真实性。通常,您可以使用“隔离”算法,例如数字化或数字化。
- Autorização: 验证使用情况是否成功,如果使用情况与应用程序发生冲突,则需要限制重复使用是否可以继续使用或不能继续使用。 Aqui entra a autorização: 定义有关的命令、操作或递归或使用或组访问。
Keycloak简介
简单地说,Keycloak 是身份识别和访问开源的重要工具,需要注意应用程序和安全性的必要性。
Entre suas principais funcionalidades, é interessante ser destacado que o keycloak:
- 实现 SSO nas suas aplicações(单点登录)
- Gerencia seus usuários
- UI 交互的Gerencia funcionalidades
- Realiza isolamento de Tenants(不存在超级合法的领域)
- 常用联邦法规
- 包含外部身份证明(例如 GitHub、Instagram、Facebook 等)
- 拥有 OpenID、oAuth 2.0 和 SAML 2.0 等多种身份验证服务。
演示
为了演示实现应用程序的验证和授权的便利性,我将演示如何通过以下方式:
1)通过 Docker 启动 KeyCloak;
2)Criar um novo领域;
3)Criar usuários;
4)Criar uma web-api 和 configurar o Keycloak;
5) Testar 端点 protegidas
6) Criar 组、角色和关联组、usuários 和角色;
7) Testar novamente os 端点;
- 要求:
- Docker
- .NET 6.0
- 邮差或失眠
通过 Docker 启动 Keycloak
- 接下来,您需要安装 Docker。如果没有,请继续阅读相关文档 ( https://www.docker.com/get-started/ )
- Abra um 终端 e 数字或连续命令:```bash
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:22.0.1 start-dev
> Aqui, estamos expondo a porta 8080 e configurando as chaves de ambiente para acesso ao Console de Administrador e iniciando o Keycloak em modo de desenvolvimento com o start-dev.
Vamos para o console administrador via http://localhost:8080/admin/master/console/ e podemos acessar pelas credenciais cadastradas acima.

## Criação de um novo Realm
Vamos realizar a criação de um novo realm para nossa aplicação
Clique no dropdown embaixo de KeyCloak e clique em Create Realm

Dê um nome para o seu realm, no caso estarei nomeando o meu como **mordor**

Feito isso, o realm já estará ativo e selecionado e podemos passar para o próximo passo.
## Criação de usuários.
Dentro do realm que acabamos de criar, podemos realizar a criação de usuários clicando em Users no painel lateral e depois em Add User

Irei criar inicialmente três usuários: Sam, Frodo e Sauron. Todos eles com apenas username e name.
Ao criar um usuário, precisamos definir a sua senha. Clique em um usuário e na aba Credentials, clique em Set Password e desmarque senha temporária apenas para testes.

Feito isso, já temos nossos tres usuários criados e podemos partir para a criação de nossa web-api para realizarmos nossos primeiros testes de autenticação!
## Criação da web-api e configuração do Keycloak
Crie uma nova aplicação do tipo web-api. Pode ser feito via UI pelo Visual Studio ou pelo comando:
```bash
dotnet new webapi -n NomeDoProjeto
通过 NuGet 安装为 KeyCloak 所需的图书馆
dotnet add package Keycloak.AuthServices.Authorization
dotnet add package Keycloak.AuthServices.Authentication
确认安装正确后,我们就可以进行csproj项目了。 Deverá estar assim:
与 KeyCloak 相同的应用程序的 Precisamos fazer,对于客户端管理员控制台的precisaremos 来说非常重要。
没有横向的绘画,在客户端和创建客户端中建立小集团。在下一步中输入客户端 ID并查看mordor-api和 clique。
Iremos marcar 客户端身份验证和授权 e clicar em 下一步
没有登录设置,则可以将主页 URL 定义为重定向 URL,或实现注销的 URL。如果您想要简单地使用 Web-API,请不要忘记密码,请注意,您必须先登录,然后才能通过身份验证快速实现或重新启动我们的主页。嗯,usuário。
首先是客户端,需要定义客户端范围,并结合权限、属性或功能来确定应用程序的授权和授权。没有横向疼痛,vamos clicar em 客户端范围 e depois em 创建客户端范围。
选择“默认”或“发送 OpenID 连接”。
对于其他地方,我希望定义映射器,并确保映射器可以作为令牌。
Primeiro、iremos adicionar um 映射器预先定义为 um client dentro do token 的角色。
Iremos adicionar um novo mapper configurado, para adicionar o Campo de Audience no token. AddMapper 和 ByConfiguration 中的派系和受众。
Nosso escopo deverá ter dois 映射器:
客户范围内的详细说明。 Na a aba Clients, clique no client que você criou e depois disso na a a aba Superior 客户端范围 e 添加客户端范围。

需要额外配置客户端,配置 web-api。 Ainda 没有菜单 客户端,集团没有下拉菜单 操作没有高级目录和下载适配器配置。

如果“ssl-required”为“external”,“ssl-required”为“none”,则无法使用该证书。
复制所有 JSON,然后appsettings.Development.json发送“Keycloak”。使用 ficar assim 进行配置:
Agora,请注意授权和授权Program.cs。
Adicione as seguintes linhas de código ao seu Program.cs:
var authenticationOptions = builder
.Configuration
.GetSection(KeycloakAuthenticationOptions.Section)
.Get<KeycloakAuthenticationOptions>();
builder.Services.AddKeycloakAuthentication(authenticationOptions);
var authorizationOptions = builder
.Configuration
.GetSection(KeycloakProtectionClientOptions.Section)
.Get<KeycloakProtectionClientOptions>();
builder.Services.AddKeycloakAuthorization(authorizationOptions);
重要的是,请参阅图书馆appsettings.json的相关部分。说明 KeycloakAuthenticationOptions 绑定相关信息,作为获取 Pelo 适配器的信息,是管理员控制台的额外信息。 啊,não se esqueça também de adicionar:KeycloakKeycloakAuthenticationOptions.Section
app.UseAuthentication();
app.UseAuthorization();
Feito isso,crie um Controller e alguns 终点位于胎儿睾丸旁。 Criei dois 端点 assim:
[HttpGet]
[Authorize]
public ActionResult CreateRing()
{
return Ok("Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk, agh burzum-ishi krimpatul");
}
[HttpDelete]
[Authorize]
public ActionResult DestroyRing()
{
return NoContent();
}
Testando os 端点 protegidos
邮递员,请acess_token访问http POST: //localhost:8080/realms/mordor/protocol/openid-connect/token。
不需要Body任何要求,需要通过使用 senha 配置来实现 access_token 的 grant_type

Se tudo estiver correto, como resposta iremos receber uma resposta assim:
Podemos colar o access_tokenno site https://jwt.io/ para verificar quais foram os Campos que vieram no nosso JWT!
Iremos testar um dos nossos 端点 protegidos sem estarmos autorizados:

Podemos 观察状态为 401 未经授权。 Agora,没有 autorizarmos colando 或access_token没有 Bearer Token obtemos um Status 200。
团体和角色的关系以及团体和团体的联系。
通过 KeyCloak 管理员控制台的 Voltando,可以实现无横向组的控制。 Irei criar apenas um grupo chamado FellowshipOfTheRing

Agora iremos criar uma 是我们客户的角色。如果是客户,请选择客户以实现演示并选择角色,然后选择新角色。 Criei duas 的角色以 abaixo 表示。

弗罗多和山姆(os usuários que criei)是指环团契团体的成员。团体、团体、会员和添加成员

Mapearemos apenas uma 是我们的角色。角色映射和分配角色的关系。 Filtramos por Clients(对于我们的客户而言,它是重要的角色)和 DestroyRing 的角色。

Agora,无横向,em 用户,iremos 属于 CreateRing 角色,通常为索伦。
测试新操作系统端点。
作为新的访问权限配置,可以配置角色的端点。没有控制器,irei mudar 作为轮换插入或参数验证作为角色或 usuário possui。
[HttpGet]
[Authorize(Roles ="CreateRing")]
public ActionResult CreateRing()
{
return Ok("Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk, agh burzum-ishi krimpatul");
}
[HttpDelete]
[Authorize(Roles ="DestroyRing")]
public ActionResult DestroyRing()
{
return NoContent();
}
没有邮递员,瓦莫斯接收到access_token索伦,并到达终点毁灭环。
Podemos 状态代码为 403 Forbidden,访问 Sauron 时不具备角色属性DestroyRing。 Agora 可以轮流获取 CreateRing 和 StatusCode 200,访问 Sauron 时需要扮演访问端点的角色。

向 Frodo 或 Sam 索取 access_token,是否可以访问端点 CreateRing 并授予角色权限?回复模拟! Uma 角色 atribuida a um group é repassada para os usuários que estão atribuidos a este group!
获取https://jwt.io/verificamosaccess_token的验证令牌,并通过 FellowshipOfTheRing 团体的角色来实现正常端点的要求。
结论
Podemos 被视为 Keycloak 的功能,可帮助您轻松度过生活。作为 bastante claras 的文档,我们展示了各种不同的实现方式,如我们的项目和企业中提供的 Keycloak 的功能。
Espero que tenham gostado desse passo-a-passo!假装很深奥,可能没有主题,也可能没有任何话题!
演示存储库的继续
Até a proxima!
文章来源:https://dev.to/gloinho/autenticacao-e-autorizacao-de-uma-asp-net-web-api-com-keycloak-loe



















