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 WebApiGrpcdotnet new grpc -n WebApiServer
dotnet sln add ./WebApiServer/
dotnet add package Microsoft.IdentityModel.Tokens
dotnet add package System.IdentityModel.Tokens.JwtApó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.jsonDocumentaçã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 authenticationparaOn; - Defina a chave
AuthorizationparaOn; - Desmarque as caixas de seleção
Standard floweDirect 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}-dedicatede faça as seguintes configurações:- Adicione um novo
mapperdo tipoBy configurationchamadoAudience. Defina um nome e selecione sua aplicação no campoIncluded Client Audience, verifique se está marcadoOnpara 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.