Web Api simples utilizada no estudo do gRPC.
A aplicação tem disponível dois tipos de autenticação:
- Static Api Key: valor fixo validado via interceptor;
- Token JWT: token gerado pelo keycloak validado via interceptor.
dotnet new sln -n WebApiGrpc
dotnet new grpc -n WebApiServer
dotnet sln add ./WebApiServer/
dotnet add package Microsoft.IdentityModel.Tokens
dotnet add package System.IdentityModel.Tokens.Jwt
Após criar o arquivo .proto e referenciar no csproj, basta compilar para converter em classes.
dotnet new console -n ClientGrpc
dotnet sln add ./ClientGrpc/
dotnet add package Grpc.Net.Client
dotnet add package Google.Protobuf
dotnet add package Grpc.Tools
dotnet add package Newtonsoft.json
Documentação para criar container do Keycloak.
Crie um novo Realm
.
Em Clients
, crie um novo cliente para representar a aplicação. Defina as seguintes configurações:
- Informe um
Client ID
; - Defina a chave
Client authentication
paraOn
; - Defina a chave
Authorization
paraOn
; - Desmarque as caixas de seleção
Standard flow
eDirect access grants
.
Nas configurações do cliente, na aba Client scopes
, faça as seguintes configurações:
- Exclua todos os escopos que são adicionados por padrão;
- Entre no escopo
{ClientName}-dedicated
e faça as seguintes configurações:- Adicione um novo
mapper
do tipoBy configuration
chamadoAudience
. Defina um nome e selecione sua aplicação no campoIncluded Client Audience
, verifique se está marcadoOn
para adicionar no token;
- Adicione um novo
Nas configurações do cliente, na aba Credentials
, salve o valor do Client secret
, será necessário para gerar o token JWT.
Utilizando o Postman, crie uma nova requisição do tipo POST
.
Url: http://localhost:8080/realms/{RealmName}/protocol/openid-connect/token
Body: Selecione x-www-form-urlencoded
, com as seguintes chaves:
- grant_type:
client_credentials
- client_id:
{ClientName}
- client_secret:
{ClientSecret}
Utilizando o site jwt.io, é possível visualizar o conteúdo do token.
No arquivo appsettings.json
, informe os valores para {RealmName}
, {Audience}
e {PublicKey}
.
No arquivo Program.cs
, defina qual opção de autenticação irá utilizar na aplicação Server
e Client
.