Olá a todos, sou eu novamente para compartilhar o que ando estudando recentemente.😓
Recentemente, estou estudando como configurar a autenticação OAuth2 para o repositório InterSystems FHIR. E descobri que os seguintes artigos são muito bons e fáceis de seguir.😁
SMART on FHIR EHR Launch com IRIS for Health
Para mim, como um usuário que não possui muito conhecimento sobre OAuth2.0, acho bastante difícil entender como configurar todo o ambiente OAuth2.0 antes de saber como ele se parece (o que é? quais são os parâmetros que preciso? qual é o resultado esperado?) de um ponto de vista puramente de usuário. 🤔 Aqui, tento inverter um pouco a sequência: vamos tentar falar sobre OAuth2.0 primeiro pelo lado do cliente. E, aqui, usaremos o Postman como cliente.😁
Se você quiser ter um ambiente de teste para OAuth, pode tentar os seguintes dockers:
workshop-iris-oauth2 ou o docker neste artigo Construindo um Repositório FHIR + Configuração de Servidor de Autorização OAuth2/Servidor de Recursos no IRIS for Health Parte 1
Neste artigo, configurei um repositório InterSystems FHIR com suporte a HTTPS em minha máquina local. (Baseado na minha observação, corrija-me se eu estiver errado, para fazer o OAuth da InterSystems funcionar, o servidor de recursos deve suportar HTTPS😑😐)
.png)
Então, vamos começar por algo simples. 😀
Caso 1: Autenticação Básica
As informações que precisamos são:
| URL | {hostname}/{path}/{Resources}?{parameters} |
| Body | (opcional) |
| Username | |
| Password |
.png)
Embora testar no Postman seja simples, a aparência é a seguinte:
.png)
Em geral, a autenticação básica é simples, porque tudo o que você precisa é da URL dos recursos que deseja obter e fornecer a credencial correspondente. 1 passo e você obtém os dados que deseja.😁✌
Caso 2: Autenticação OAuth
O conceito é um pouco diferente da autenticação básica. Pelo meu entendimento, a diferença chave é o conceito de sessão e token. Talvez, antes de mergulharmos de fato no OAuth2.0, vamos falar sobre algo com o qual estamos familiarizados.
Considere o seguinte cenário: você deseja visitar um Museu de Arte para um evento especial chamado "O Momento Milagroso". Como este evento é muito popular, o Museu decidiu configurar um controle de fluxo, dividindo o horário de abertura em 8 sessões, cada sessão com duração de 1 hora, e o visitante deve reservar sua própria sessão na Bilheteria antes da visita. Em outras palavras, o visitante deve apresentar um bilhete válido (token) no horário correto (sessão) ao Museu de Arte para o evento "O Momento Milagroso".
.png)
.png)
A partir do cenário acima, podemos resumir o seguinte: do ponto de vista de um cliente OAuth2.0, para acessar os recursos que queremos, precisamos:
Passo 1: obter um token do Servidor de Autenticação (Comprar um bilhete na Bilheteria)
Passo 2: apresentar o token ao Servidor de Recursos (Apresentar o bilhete no Museu de Arte)
Para obter o token, você precisa informar ao Servidor de Autenticação:
1. Quem é você? (uma das formas mais simples é fornecer o client_id e o client_secret; claro que existem outras formas, mas quero manter a simplicidade aqui😁)
2. Qual é o Servidor de Recursos que você deseja acessar? (Qual museu? Qual local?), você pode fornecer isso no parâmetro audience.
3. Qual é o escopo (scope) do seu acesso? (Qual programa? Qual evento?), você pode fornecer isso no Scope, e este escopo deve ser definido entre o Servidor de Autenticação e o Servidor de Recursos.
Então... agora ... é hora de agir como um cliente
.png)
com as informações abaixo, e obter o token pelo Postman:
| Auth Type | OAuth2.0 |
| Grant type | Client Credentials |
| Access Token URL |
https://{authentication server hostname}/oauth2/token?aud={resource server hostname}/path Por exemplo, https://authenticationserver.com/oauth2/token?aud=https://resourceserver... |
| Scope | user/.read user/.write |
| Client Authentication | Enviar como cabeçalho Basic Auth |
.png)
.png)
.png)
Após a conclusão da autenticação, clique em "use token"
.png)
Uhuuu!! agora temos um token válido aqui,😁😂 e ele expirará dentro de uma hora 😶🤐
.png)
Agora use o token para obter o recurso que desejamos
.png)
Agora tente obter o Recurso Patient (Paciente)
| URL | {resource server hostname}/{path}/Patient |
| Method | GET |
| Token | aquele que obtivemos no Passo 1 |
.png)
Uhuuu!! parece bom.😁
Obrigado pela leitura.
