Tutorial: Usando a Sensedia API Platform para Autorização de Publicadores
O Events Hub permite que você use um servidor externo para validar client ID e/ou tokens de acesso dos publicadores que enviam requisições ao Events Hub. Uma das opções é utilizar a Sensedia API Platform para fazer essa validação.
Clientes do Sensedia API Management v5: Para validar client ID e/ou tokens de acesso dos publicadores, você deverá importar a API de autorização do Events Hub. |
Imagine que você está organizando um evento em um local. Você quer que apenas pessoas autorizadas entrem. Então, você coloca um segurança na entrada para verificar a identidade das pessoas. O servidor de autorização atua da mesma forma. Você seleciona o tipo de validação que quer fazer e ele se certifica que seja cumprida. |
Como funciona?
Na página de Policies, você pode criar políticas de segurança para aplicar aos handlers.
A configuração de URLs de autorização é feita por contexto. Ele é um dos marcadores da URL de publicação de eventos, formada por: URL base + context + handler + topic .
|
Existem 5 interceptores disponíveis e 4 precisam do servidor de autorização de publicadores para funcionar. São eles:
-
Access Token Validation
-
Client ID Validation
-
OAuth Validation
-
JWT Validation
Ao selecionar qualquer um deles, você precisa configurar a URL de autorização na tela Authorizations.
Obter a URL de autorização usando a Sensedia API Platform
Para utilizar a Sensedia API Platform como servidor de validação das policies:
-
Acesse API Design > API Catalog e busque por API Events Hub Authorization;
-
Na API Events Hub Authorization, vá até a seção Environments;
-
Escolha o ambiente que deseja configurar, clique sobre o ícone e copie a URL.
Você precisará complementá-lo com a informação do interceptor, portanto, cole-o em um arquivo; -
Vá até a seção Resources and Operations e copie o path
POST
do tipo de interceptor que utilizará; -
Cole o path do interceptor no final da URL do ambiente. Esta será a URL do seu authorization;
-
Com a URL completa copiada, acesse Events Hub > Authorizations e encontre o contexto que será validado por este authorization;
-
Clique no ícone , cole a URL do authorization e salve.
Para cadastrar um contexto de teste para o authorization, na seção Environments, copie o link do seu ambiente de teste. |
A seção Resources and Operations está dividida entre OAuth e JWT. Atenção ao copiar o path da sua URL:
-
A URL do authorization deve ser gerada respeitando as policies inseridas no contexto;
-
Se inseriu interceptores de OAuth Validation, copie o path de Oauth.
-
Se inseriu interceptores de JWT Validation, copie o path de JWT.
Configurar Client ID Validation
O interceptor Client ID Validation requer uma validação simples de client ID.
Ao cadastrar este interceptor para uma política, você precisa definir o nome que será usado para passar o valor de Client ID (por exemplo, client_id ) e onde será passado na requisição (cookie; header; header ou cookie; query param; ou any).
|
Para usar o interceptor Client ID Validation, siga os passos:
-
Na Sensedia API Platform
-
Acesse a Consumers > APPS e clique em + Create APP;
-
Na aba APIS AND PLANS, busque por Events Hub Authorization 1.0 e selecione-a no botão SELECT ALL PLANS;
-
Clique em PUBLISH YOUR APP;
-
-
No Events Hub
-
Cadastre o Publisher
-
Com a APP salva, acesse a tela Publishers;
-
Coloque o cursor sobre o botão + e clique em Import From API Platform;
-
Encontre a APP que cadastrou e clique em SAVE;
-
Clique em ADD ENABLED TOPICS e vincule o publicador ao tópico que deseja;
-
Na mesma tela, clique no ícone para habilitar o contexto que será validado pelo interceptor. Se não habilitar nenhum, a validação não funcionará.
-
-
Acesse o Handler
-
Na tela de Handler, encontre o que cadastrou para essa validação;
-
Na aba Topics, copie a URL do contexto habilitado para o interceptor de Client ID;
-
-
-
No Postman
-
No
POST
, cole a URL do seu contexto; -
Insira o parâmetro de client ID no header da requisição, com o nome igual ao que cadastrou para a política (ex: client_id) e clique em Send;
-
Você pode ver se a requisição foi bem-sucedida clicando sobre o ícone do seu handler.
-
Configurar Access Token Validation
O interceptor Access Token Validation requer a validação de um access token. Ele deve ser obtido usando o fluxo OAuth escolhido pelo publicador.
Ao cadastrar este interceptor para uma política, você precisa definir o nome que será usado para passar o valor de access token (por exemplo, access_token ) e onde será passado na requisição (cookie; header; header ou cookie; query param; ou any).
|
Para configurá-lo, siga os passos:
-
Na Sensedia API Platform
-
Acesse a Consumers > APPS e clique em + Create APP;
-
Na aba APIS AND PLANS, busque por Events Hub Authorization 1.0 e selecione-a no botão SELECT ALL PLANS;
-
Clique em PUBLISH YOUR APP.
-
Se já tem uma APP com plano vinculado à API Events Hub Authorization 1.0, você não precisa fazer isso novamente. |
-
No Postman
-
Gerar o access token
-
Para obter o token, você deve fazer uma requisição à API OAuth implantada na sua Plataforma. Vamos ensinar como fazer usando o fluxo client-credentials:
Para entender os outros fluxos disponíveis, acesse a documentação OAuth 2.0: fluxos de obtenção de access token. |
1. No POST
, faça uma requisição para o endpoint <url-do-gateway>/oauth/access-token
;
2. No header da requisição, você deve passar:
Authorization : Basic client_id:client_secret
Exemplo de header com o Authorization : Basic ZjkyMTIxNzMtZTcwNS0zNzNiLWE2OTgtNjE5MjNlMzc4MzU5OjAyYWI1Mjg4LTkyZGItM2FiMy05OWZkLWZhYzRhZjg1N2Q4MQ== |
3. No body da requisição, você deve passar o grant_type
no formato x-www-form-urlencoded
:
"grant_type": "client_credentials"
4. O access token será gerado e retornado no body da requisição, como no exemplo abaixo:
{ "access_token": "6c164a82-84a6-3bc4-8122-f777121a4f62", "token_type": "access_token", "expires_in": 3600 }
-
Para testar a política:
-
Copie a URL do seu contexto e cole no
POST
; -
Insira o parâmetro de access token no header da requisição, com o nome igual ao que cadastrou para a política (ex: access_token);
-
Cole a chave do seu access token no valor e clique em Send;
-
Você pode ver se a requisição foi bem-sucedida clicando sobre o ícone do seu handler.
-
Configurar OAuth Validation
O interceptor OAuth Validation requer a validação de client ID
e access token
.
Se ainda não configurou, veja os tópicos:
Os valores de client ID e access token devem ser passados no header da requisição.
-
Testando a política no Postman
-
Copie a URL do seu contexto e cole no
POST
; -
Cole no header o valor do seu client ID;
-
Cole no header o valor do seu access token;
-
Clique em Send;
-
Você pode ver se a requisição foi bem-sucedida clicando sobre o ícone do seu handler.
-
Configurar JWT Validation
O interceptor JWT Validation requer a validação de um token JWT que deve ser obtido pelo fluxo JWT de OAuth.
Ao cadastrar este interceptor para uma política, você precisa definir o nome que será usado para passar o valor de access token (por exemplo, access_token ) e onde será passado na requisição (header; default JWT header; ou query param).
|
Para que este interceptor funcione, você deve cadastrar a URL do authorization JWT do seu contexto na tela de Authorizations. |
Para configurá-lo, siga os passos:
-
Na Sensedia API Platform
-
Acesse a Consumers > APPS e clique em + Create APP;
-
Na aba APIS AND PLANS, busque por Events Hub Authorization 1.0 e selecione-a no botão SELECT ALL PLANS;
-
Clique em PUBLISH YOUR APP.
-
Se já tem uma APP com plano vinculado à API Events Hub Authorization 1.0, você não precisa fazer isso novamente. |
-
No Postman
1. Gerar o code
Para obter o token, você precisa gerar o code
fazendo uma requisição à API OAuth implantada na sua Plataforma.
1. No POST
, faça uma requisição para o endpoint <url-do-gateway>/oauth/grant-code
;
2. No header da requisição, você deve passar:
Content-Type : application/json
3. No body, passe as informações abaixo. Lembre-se de substituir o client ID do exemplo pelo da sua APP:
{ "client_id": "f9212173-e705-373b-a698-61923e378359", "extraInfo": {}, "redirect_uri": "string", "state": "string" }
A redirect_uri precisa ser preenchida com uma URL. Você pode inserir, por exemplo: "http://teste.com.br" .
|
Na resposta, será retornado o code
após o sinal de =, como no exemplo abaixo:
{ "redirect_uri": "string?state=string&code=8748d39f-1d4f-311f-92c6-4b279db1b317" }
2. Gerar o token JWT
Com o code
copiado, você pode gerar o token JWT:
1. No POST
, faça uma requisição para o endpoint <url-do-gateway>/oauth/access-token
;
2. No header da requisição, você deve passar:
Authorization : Basic client_id:client_secret
3. No body, selecione o formato json
e passe as informações abaixo, com o número do code
que gerou na requisição anterior:
"grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer" "code" : "8748d39f-1d4f-311f-92c6-4b279db1b317"
4. O token será retornado na resposta da requisição, como no exemplo abaixo:
{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJsb2NhbGhvc3QiLCJpc3MiOiIxNzIuMTguMC4xIiwic3ViIjoiOWI1Zjc3MWUtNzgyZC0zNTEwLWI2YmEtMzZlOWM2NWJmZDVkIiwiZXhwIjozNjAwLCJpYXQiOjE1Mjg5MTg2MzcsIkFwcDogIjoiRGVtb0FwcCIsIkNvZGU6ICI6IjRlNWIyMTEzLTJkYzYtM2RlNi1iN2ZkLWNkOTYxOTMxZWQyOSIsImxvZ2luIjoidXNlci5sb2dpbiJ9.DVSd_yIKiWqIRpcFUhpB5JT9HMUE4mI5fAcpzs4QOkM", "token_type": "access_token", "expires_in": 3600 }
-
Testando a política no Postman
-
Copie a URL do seu contexto e cole no
POST
; -
Cole no header o valor do seu token JWT;
-
Clique em Send;
-
Você pode ver se a requisição foi bem-sucedida clicando sobre o ícone do seu handler.
-
Share your suggestions with us!
Click here and then [+ Submit idea]