Configuration d'un client OAuth2 pour les appels iris-http-calls à Epic on FHIR
Il y a environ un mois, j'ai commencé à travailler sur l'utilisation du logiciel Epic on FHIR.
Création d'une paires de clés publiques-privées
mkdir /home/ec2-user/path_to_key
openssl genrsa -out ./path_to_key/privatekey.pem 2048
Pour les applications back-end, vous pouvez exporter la clé publique vers un certificat X.509 encodé en base64 intitulé publickey509.pem à l'aide de la commande ci-dessous...
openssl req -new -x509 -key ./path_to_key/privatekey.pem -out ./path_to_key/publickey509.pem -subj '/CN=medbank'
où '/CN=medbank' est le nom du sujet (par exemple le nom de l'application) pour lequel la paire de clés est utilisée. Le nom du sujet n'a pas d'impact fonctionnel dans ce cas, mais il est nécessaire pour créer un certificat X.509.
Le logiciel Epic on FHIR est une ressource gratuite pour les développeurs qui créent des applications
J'ai enregistré mon application "medbank" afin d'obtenir un identifiant client
J'ai supprimé les identifiants client et modifié l'URL du jeu JWK hors production (Non-Production JWK Set URL) afin de protéger l'adresse IP réelle.

La documentation d'Epic indique que votre application effectue une requête HTTP POST au point de terminaison OAuth 2.0 du serveur d'autorisation pour obtenir un jeton d'accès. J'ai essayé d'écrire du code, mais je n'ai jamais réussi à obtenir un jeton d'accès.
J'ai appelé le WRC InterSystems pour obtenir de l'aide.
Nous avons configuré un client OAuth2 en utilisant le type de certificat "JWT Authorization" et la "private key JWT" pour l'authentification.
Nous avons ensuite essayé de l'exécuter sur le terminal en utilisant IsAuthorized() et GetAccessTokenJWT(), mais la réponse a été "invalid client ID".
Quelques jours plus tard, nous avons vu que le grant_type était en fait supposé être client_credentials, nous avons donc changé pour utiliser cela en passant de GetAccessTokenJWT() à GetAccessTokenClient() et cela a fonctionné.
Je souhaiterais mettre en œuvre Epic sur FHIR en tant que cas d'utilisation pour les iris-http-calls
J'ai utilisé Docker pour déployer les iris-http-calls dans AWS.
sudo docker build --no-cache --progress=plain . -t oliverwilms/iris-http-calls 2>&1 | tee build.log
sudo docker run -d -p57700:52773 oliverwilms/iris-http-calls
J'ai copié des fichiers de clés privées et publiques avec un accès en lecture pour IRIS
chmod 644 privatekey.pem
sudo docker cp ./privatekey.pem container_name:/home/irisowner/dev/
sudo docker cp ./publickey509.pem container_name:/home/irisowner/dev/
chmod 600 privatekey.pem
J'ai créé des informations d'identification X509 dans IRIS
Set oX509Credentials = ##class(%SYS.X509Credentials).%New()
Set oX509Credentials.Alias = "medbank"
Set tSC = oX509Credentials.LoadCertificate("/home/irisowner/dev/publickey509.pem")
Do $System.Status.DisplayError(tSC)
Set tSC = oX509Credentials.LoadPrivateKey("/home/irisowner/dev/privatekey.pem")
Do $System.Status.DisplayError(tSC)
Set tSC = oX509Credentials.%Save()
Do $System.Status.DisplayError(tSC)
Configuration d'un client OAuth2
http://localhost:57700/csp/sys/sec/%25CSP.UI.Portal.OAuth2.Client.ServerList.zen

Cliquez sur Create Server Description (Créer une description de serveur)
Création de la description du serveur
Renseignez le champ Issuer Endpoint, choisissez SSL/TLS Configuration et cliquez sur Discover and Save (Découvrir et enregistrer).
https://fhir.epic.com/interconnect-fhir-oauth/oauth2

J'ai cliqué sur Annuler (Cancel) et je suis retourné à
http://localhost:57700/csp/sys/sec/%25CSP.UI.Portal.OAuth2.Client.ServerList.zen

Cliquez sur le lien Client Configurations (configuration des clients).
Création de la configuration des clients

Cliquez sur Create Client Configuration (Créer une configuration des clients)

Sous l'onglet General, indiquez le nom de l'application:
medbank
Choisissez le type de client: Confidential
Choisissez la configuration SSL
Sous l'URL de redirection du client, indiquez le nom de l'hôte
localhost
Port
57700
Décochez la case Use TLS/SSL
Sous Types de certificats requis, cochez la case d'informations d'identification du client "Client Credentials"
Sous Type d'authentification, choisissez clé privée JWT
Sous Algorithme de signature d'authentification, choisissez RS384
Remplissez le champ Audience
https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token
Sous l'onglet JWT Settings (Paramètres JWT), cochez la case Create JWT Settings (Créer des paramètres JWT) à partir d'informations d'identification X509. Choisissez vos informations d'identification dans la liste déroulante. Dans la colonne de signature Signing de la ligne des algorithmes de jetons d'accès, choisissez RS384.

Sous l'onglet Client Credentials (Informations d'identification du client), j'ai copié l'identifiant client hors production que j'avais reçu du logiciel Epic on FHIR. Le code secret client est requis. Je l'ai rempli comme x.

Important: N'oubliez pas de cliquer sur Save (Enregistrer)