FHIR Chat · Backend Services · smart

Stream: smart

Topic: Backend Services


view this post on Zulip Grahame Grieve (Sep 20 2017 at 06:09):

@Josh Mandel some questions about the backend services spec

view this post on Zulip Grahame Grieve (Sep 20 2017 at 06:10):

doc says:

view this post on Zulip Grahame Grieve (Sep 20 2017 at 06:10):

  • Register a fixed “issuer URL” with the EHR
  • Register a public RSA key with the EHR (for RSA SHA-256 signatures)

view this post on Zulip Grahame Grieve (Sep 20 2017 at 06:10):

then the JWT says:

view this post on Zulip Grahame Grieve (Sep 20 2017 at 06:11):

{
 " iss": "https://{app url}",

view this post on Zulip Grahame Grieve (Sep 20 2017 at 06:11):

I think that the app url is meant to be the 'fixed "issue URL" with the EHR

view this post on Zulip Grahame Grieve (Sep 20 2017 at 06:12):

but I'm confused about whether it should or shouldn't have 'https://' when registered. this is unclear

view this post on Zulip Grahame Grieve (Sep 20 2017 at 06:13):

also the exp value in the sample JWT is... creative

view this post on Zulip Grahame Grieve (Sep 20 2017 at 06:13):

I have the same question about the token url with regard to prefix...

view this post on Zulip Josh Mandel (Sep 20 2017 at 12:32):

The fixed issuer url should be registered with the EHR (including "https"), and should be inserted wholesale as the jwt's iss property. Agree this should be clearer.

view this post on Zulip Josh Mandel (Sep 20 2017 at 12:33):

Ditto for the token url.

view this post on Zulip Josh Mandel (Sep 20 2017 at 12:38):

How is the exp creative? It's 1422568860, an integer number of seconds since epoch representing Thursday, January 29, 2015 10:01:00 PM, presumably when the example was written.

view this post on Zulip Josh Mandel (Sep 20 2017 at 12:41):

I don't think this specification has been implemented as written (though I'm not aware of places where it's broken... yet). I know @Isaac Vetter and @Jenni Syed have expressed interest.

view this post on Zulip Grahame Grieve (Sep 20 2017 at 12:57):

hmm. "exp" - I must have read the wrong piece of code. It thought it was relative

view this post on Zulip Isaac Vetter (Sep 20 2017 at 14:36):

Josh, we are actively developing support for Backend services as written.

view this post on Zulip Josh Mandel (Sep 20 2017 at 14:36):

@Grahame Grieve : expires_in on the token response is relative...

view this post on Zulip Jenni Syed (Sep 20 2017 at 14:57):

I think we'll be trying to do something for the connectathon and as this matures. Right now we use the OAuth 2 "client credentials" grant b/c it didn't seem like backend services had been ironed out yet. I reached out internally to see if there were any concerns with the draft as specified

view this post on Zulip Jenni Syed (Sep 20 2017 at 14:58):

I know we generally prefer not having the symmetric/shared secret :)

view this post on Zulip Jenni Syed (Sep 20 2017 at 14:59):

I'm curious how the certificate management part of this may work

view this post on Zulip Josh Mandel (Sep 20 2017 at 15:01):

No certificates! Just bare keys :-)

view this post on Zulip Jenni Syed (Sep 20 2017 at 15:02):

I guess I need to reread that draft :)

view this post on Zulip Jenni Syed (Sep 20 2017 at 15:03):

But either way, just public key, IIRC

view this post on Zulip Josh Mandel (Sep 20 2017 at 15:07):

Yes.

view this post on Zulip Grahame Grieve (Sep 20 2017 at 20:32):

another question about the JWT - it says

"sub" : "app_client_id"

view this post on Zulip Grahame Grieve (Sep 20 2017 at 20:32):

is this literal? if it's not, what is it ? (@Josh Mandel)

view this post on Zulip Josh Mandel (Sep 20 2017 at 20:32):

Not literal ;-) It's meant to express the OAuth client_id that the backend service received when registering with the EHR.

view this post on Zulip Grahame Grieve (Sep 20 2017 at 20:33):

the specification doesn't otherwise mention anything about a client_id from the backend service

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 20:35):

It is the sub field in the JWT

view this post on Zulip Grahame Grieve (Sep 20 2017 at 20:35):

does the client_id bring any value over the issuer url?

view this post on Zulip Grahame Grieve (Sep 20 2017 at 20:36):

I think it does - but the spec should mention it explicitly in 'Registering a SMART Backend Service'

view this post on Zulip Josh Mandel (Sep 20 2017 at 20:38):

Yes! PRs or GH issue reports welcome on this stuff ;)

view this post on Zulip Josh Mandel (Sep 20 2017 at 20:39):

In theory, you could have a bunch of services all relying on the same issuer. When registering a service with the EHR, we'd say that the service supplies the issuer value, and the EHR assigns a client_id.

view this post on Zulip Grahame Grieve (Sep 20 2017 at 20:42):

ok where exactly do you want change proposals?

view this post on Zulip Josh Mandel (Sep 20 2017 at 20:43):

For backend services: http://docs.smarthealthit.org/authorization/backend-services/ has an "edit this page" link

view this post on Zulip Grahame Grieve (Sep 20 2017 at 20:45):

hmm. so I have to propose specific changes? what about changes inside the diagrams?

view this post on Zulip Grahame Grieve (Sep 20 2017 at 21:50):

@Josh Mandel I think that this is a valid JWT according to the instructions:

eyJhbGciIDogIlJTMjU2IiwidHlwIiA6ICJKV1QifQ.eyJhdWQiIDogImh0dHBzOi8vbG9jYWwuZmhpci5vcmc6OTYxL2F1dGgvdG9rZW4iLCJleHAiIDogLTE5MDIzMjIwNDgsImlzcyIgOiAiaHR0cDovL2xvY2FsLmZoaXIub3JnIiwianRpIiA6ICIzYWVhZTcyNC0yNmQ2LTQ3MzctYTRkMS0xYzYzM2QxZmJiN2QiLCJzdWIiIDogbnVsbH0.V1m1BLojiA2RNUdalgWAwYyyFuzTVodFlz94wqn9oB4NBQ-QzCAcl6LqG-8sA0gsDhJSMcCxHjUKV2-qwWqAfFw827RmYYDqbvipFFA9OWxh9mJcalMq4QJGF9G0WzVE8y2_g7ZkVKkFtuLpnWy4Pr8CCY_LK4AjZb9kJMAST1sJWrLtloEvBIAxOUBn-DD0S6HtRgPjV4Y9hPf_WZRybXjMckxQYLcM8XZCE54AZpUyndBOn-gV2Wo4DMmoRyLyuZ0reWPzah9EgTmL9oHLw4_jGRBBmMltqs2ZlQaCeDUrSZJmc2jvpRxZUzXf-72T5vXZTRjzdAbJDvGCD0Sd7Q

view this post on Zulip Grahame Grieve (Sep 20 2017 at 21:51):

this is the public key:

view this post on Zulip Grahame Grieve (Sep 20 2017 at 21:51):

test.fhir.org.cer

view this post on Zulip Grahame Grieve (Sep 20 2017 at 21:52):

can you check for me please... given that there's no other implementations..

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 21:54):

The sub is null in that JWT

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 21:55):

And the exp is -1902322048 (Monday, September 20, 1909 9:12:32 AM GMT)

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 21:56):

Technically, the JWT is correct (signature verified too). Functionally though, the values are odd (especially the sub).

view this post on Zulip Grahame Grieve (Sep 20 2017 at 22:43):

grr both of those programming mistakes. I was focused ont the hard stuff. at least those are easy to fix

view this post on Zulip Grahame Grieve (Sep 20 2017 at 22:43):

anyway thanks

view this post on Zulip Grahame Grieve (Sep 20 2017 at 22:49):

eyJhbGciIDogIlJTMjU2IiwidHlwIiA6ICJKV1QifQ.eyJhdWQiIDogImh0dHBzOi8vbG9jYWwuZmhpci5vcmc6OTYxL2F1dGgvdG9rZW4iLCJleHAiIDogMTUwNjA3MDExNiwiaXNzIiA6ICJodHRwOi8vbG9jYWwuZmhpci5vcmciLCJqdGkiIDogIjgwNTQzNmZhLWE4NjYtNDVlMy05MjUzLTJhY2VmZWRjNjk2ZiIsInN1YiIgOiAidGVzdF9jbGllbnRfaWQifQ.R2EPxixnZrqgvkPAbYdKgD7Coi4mf6o9G9-yIvQqKvrDCcXyODemGbGN_krhrsFa8wdhhBQTMkhbvn7-VOoSeQQFNujQfXn1gxTkk-vo5DD39EGmCQr-RxlgPaHzxys7JwPvqhKGHw2MBDhcrhaKBhU7KIBEfBkxm4gzBTJdh8L4248H2xShEGJV5Sg1BXgPWGpKB3BDhVt3_Gm29YmiXigSrDrwtHYezSSxpFPF42dSAtVhccKKKodnEM3hFK2FP8_T0kzNgV4uhX_inqcP7AFUH-I3iyzkfAtazs5hV-xaMy-aukdthL_S8lgBUWLGFGhvHqMVjjHhRz-aPyk6uw

view this post on Zulip Grahame Grieve (Sep 20 2017 at 22:49):

fixed...

view this post on Zulip Pascal Pfiffner (Sep 20 2017 at 22:50):

One of you has figured out how to override my Zulip pref of not sending desktop notifications – I'm getting them for messages in this thread only!

view this post on Zulip Grahame Grieve (Sep 20 2017 at 22:50):

... you have been pwned

view this post on Zulip Pascal Pfiffner (Sep 20 2017 at 22:51):

UNPLUG UNPLUG

view this post on Zulip Grahame Grieve (Sep 20 2017 at 22:51):

more seriously you can set that in a per stream level yourself

view this post on Zulip Pascal Pfiffner (Sep 20 2017 at 22:52):

That's what I'm saying – I've never opted in to notifications (except PMs) but I'm getting them for this stream, without touching anything

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:02):

@Grahame Grieve - The new JWT you posted looks much better. The expvalue though is set to Friday, September 22, 2017 8:48:36 AM GMT. Per the current draft, the exp "MUST be no more than five minutes in the future."

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:03):

@Pascal Pfiffner - Maybe someone defaulted your notifications for the #smart stream back when you worked on the SMART team?

view this post on Zulip Pascal Pfiffner (Sep 20 2017 at 23:04):

Maybe. Bastards!!
It was indeed checked, no idea why, unchecked now. :)

view this post on Zulip Grahame Grieve (Sep 20 2017 at 23:10):

I missed that about exp. why does that rule exist?

view this post on Zulip Grahame Grieve (Sep 20 2017 at 23:13):

reading further into the spec:
required scope is "system/CommunicationRequest.write (which allows the app to generate alerts for clinical users)" - why must a backend services server - a spec useful for all sorts of reasons - have clinical users, let alone let any client communicate with them?

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:50):

A short lived exp allows issuers to rotate their keys on a frequent basis. Given that our JWTs in this scenario are transient, making them short lived makes sense.

The exp is also useful for mitigating replay attacks. While the jti serves this purpose explicitly, it also requires clients to maintain a cache of known jti values it has encountered. While this is recommended, I'm sure many clients will not keep this type of state. In this case, the exp is an easy check to prevent any replays after the short lived window.

view this post on Zulip Grahame Grieve (Sep 20 2017 at 23:51):

I understand why it might be good to rotate keys. enforcing this by sealing the exp on JWT seems... very round about.

view this post on Zulip Grahame Grieve (Sep 20 2017 at 23:52):

your second paragraph... why do clients need to maintain a cache of their own jti values?

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:54):

How else would clients know if they have seen a previous jti (nonce) value?

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:54):

The purpose of the jti is so that a JWT can only be claimed once by the intended client

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:56):

In order to enforce that, the client must record the jtiwhen it validates the JWT. If it sees another JWT with the same jti, then it should reject it since an attacker is attempting to replay the JWT

view this post on Zulip Grahame Grieve (Sep 20 2017 at 23:56):

but clients create the jti value... that's why I'm not sure what you mean

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:56):

The issuer creates the JWT (and thus jti)

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:57):

When I say "client" I'm referring to the entity receiving the JWT and the entity identified by the client_id (sub)

view this post on Zulip Grahame Grieve (Sep 20 2017 at 23:57):

doesn't the server receive the JWT?

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:57):

In this diagram on the backend services draft page, it is the "App"

view this post on Zulip Grahame Grieve (Sep 20 2017 at 23:57):

and the App (the client) creates the JWT

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:58):

Arg...wait...

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:58):

My bad

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:58):

I had this flipped (I was thinking CDS Hooks)

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:58):

You are correct

view this post on Zulip Grahame Grieve (Sep 20 2017 at 23:59):

ok. so the server has to prevent replay attacks. that's obvious, but not stated. another pull request on the way...

view this post on Zulip Kevin Shekleton (Sep 20 2017 at 23:59):

So everything where I said the client needs to verify the JWT, replace that with the EHR :-)

view this post on Zulip Grahame Grieve (Sep 21 2017 at 00:03):

setting key expiry to <5 minutes means the clocks have to be correct... I always prefer to be >1 hour, given timezone pecularities...

view this post on Zulip Grahame Grieve (Sep 21 2017 at 00:03):

why I defaulted to 24 hours, even though I would never actually reuse it

view this post on Zulip Kevin Shekleton (Sep 21 2017 at 00:08):

I agree that 5min is too short since the current proposal is requiring the server + ehr to have clock consistency

view this post on Zulip Grahame Grieve (Sep 21 2017 at 00:08):

so... 2 hours?

view this post on Zulip Kevin Shekleton (Sep 21 2017 at 00:10):

We need to add an iat claim to the JWT. This would prevent any clock skew

view this post on Zulip Kevin Shekleton (Sep 21 2017 at 00:10):

iat is issued at time (seconds since epoch). This is the time from the server and will be consistent with the exp. The EHR can then compare exp to iat. (We use this in CDS Hooks)

view this post on Zulip Kevin Shekleton (Sep 21 2017 at 00:11):

Wait, no.

view this post on Zulip Kevin Shekleton (Sep 21 2017 at 00:11):

I need more sleep :)

view this post on Zulip Kevin Shekleton (Sep 21 2017 at 00:12):

Yes, the exp value needs to be longer than 5min. 2 hours seems like too long still. 15 minutes?

view this post on Zulip Grahame Grieve (Sep 21 2017 at 00:16):

well, if we say that the servers have to do offset from iat, then it doesn't have to be long... but, really, doesn't that do away with the supposed security advantage of a short exp?

view this post on Zulip Kevin Shekleton (Sep 21 2017 at 00:22):

It doesnt..that's what my "wait, no" comment was referring to

view this post on Zulip Kevin Shekleton (Sep 21 2017 at 00:25):

The use of exp requires the clock of the server and EHR to be in sync. iat doesn't help prevent this

view this post on Zulip Grahame Grieve (Sep 21 2017 at 00:35):

so, where does this end up then? iat doesn't really help. exp is still too short to be robust against clock deviations. timezone associated deviations can be +/- 1 hour... so an exp window of +/- 1 hour + a few minutes, and servers mandated to track jti for 24 hours... no replay attacks, and robust against clock variations

view this post on Zulip Kevin Shekleton (Sep 21 2017 at 00:43):

Clock skew shouldn't be in hours, right? Timezone differences should affect any skew since both the server and EHR should be looking at the UTC time, right?

view this post on Zulip Grahame Grieve (Sep 21 2017 at 00:48):

hmm. yes lets assume that whether timezones changes are wrong or not, servers will correct to UTC internally consistently. (though my implementation may not in the microseconds around the change)

view this post on Zulip Grahame Grieve (Sep 21 2017 at 00:51):

perhaps 5min does it . https://serverfault.com/questions/394967/what-is-a-realistic-average-time-difference-between-servers-in-the-same-lan

view this post on Zulip Josh Mandel (Sep 21 2017 at 01:39):

I think 5min is a pretty reasonable recommendation. It requires that machines really do synchronize their clocks to a timeserver, but it doesn't require any heroics.

view this post on Zulip John Moehrke (Sep 21 2017 at 14:32):

Timeout should not be mandated in SMART.. guidelines as recommendations are useful for initial implementers. But actual timeouts used should be in the hands of the specific environment. This allows some systems that have high trust, to be less chatty... while others, in very unstable environments, to be more conservative. Thus risk drives actual. Yes, include useful guidance, but don't mandate it.

view this post on Zulip Grahame Grieve (Sep 21 2017 at 19:04):

the goal here is very specific: ensure that the tokens are single use

view this post on Zulip Grahame Grieve (Sep 22 2017 at 07:42):

Now that I've fully implemented the backend services spec, I don't really see that it has any value. Say we compare to it to a baseline which is a server that uses SSL+basic Authentication (username/password). What attack vectors does the backend services protocol close down that the simple baseline doesn't?

view this post on Zulip Grahame Grieve (Sep 22 2017 at 07:46):

and I can't see what it is. If someone can break into the client and get the username/password, they can break into the client and get the privatekey/issuer. then they can impersonate the client

view this post on Zulip Grahame Grieve (Sep 22 2017 at 07:46):

except that if they can MITM the SSL, they very likely to be able to keep doing that

view this post on Zulip Grahame Grieve (Sep 22 2017 at 07:46):

ok, true, if someone can MITM the SSL, then they can impersonate the baseline client indefinitely, where as with the backend services spec, they can only do so for the length of the session .. that is, 15 min

view this post on Zulip Grahame Grieve (Sep 22 2017 at 07:46):

because given the increased complexity, it better be something really good...

view this post on Zulip Grahame Grieve (Sep 22 2017 at 07:48):

somehow those are all out of order for me

view this post on Zulip Grahame Grieve (Sep 22 2017 at 11:55):

read them by the clock, not their literal order...

view this post on Zulip Josh Mandel (Sep 22 2017 at 13:44):

The backend services spec just provides whatever value you think there is in using asymmetric secrets (as opposed to symmetric secrets). No more or less IMO.

view this post on Zulip Josh Mandel (Sep 22 2017 at 13:45):

Say we compare to it to a baseline which is a server that uses SSL+basic Authentication (username/password).

@Grahame Grieve do you mean basic Auth on an OAuth "token" endpoint?

view this post on Zulip Josh Mandel (Sep 22 2017 at 13:59):

The general protections that asymmetric access provides: clients don't need to be worried about a hacked server leaking their credentials; clients don't need to be worried about getting "tricked" into revealing a secret to the wrong party (because they never reveal secrets and every authentication JWT has a built-in audience); clients can manage rotation of their own secrets as-needed; clients don't need to manage a store with multiple secrets (one per EHR)

view this post on Zulip John Moehrke (Sep 22 2017 at 14:31):

using SSL + Basic auth (username/password) is bad because of the password management. backend passwords then to be static, static passwords are bad. It is, a 'shared secret', not an asymmetric authentication. Using Mutual-Auth-TLS enables use of Public/Private key authentication, with opportunity for revocation management. These certificates can be issued for very long periods of time (2-10 years), thus limiting the management. Where a breach would update revocation (CRL or OCSP). Why not using mutal-auth-TLS?

view this post on Zulip Jenni Syed (Sep 22 2017 at 17:36):

@John Moehrke the existing spec is asymmetric, it's just not using certs. I don't think we want true mutual TLS for this (not that network layer). If you're saying you want more of a cert trust model, that's different. But still asymmetric auth.

view this post on Zulip John Moehrke (Sep 22 2017 at 17:48):

My basic first question is indeed, why not mutual-auth-TLS for backend-to-backend... Yes, not using OAuth at all... I am not against OAuth for this, but I first want to understand why TLS is not recommended. And I think that TLS has precedent and advantages. OAuth is indeed better in some cases, I am not against it. Just think that it is legitimate solution for backend-to-backend, especially for long-term relationships.

view this post on Zulip Jenni Syed (Sep 22 2017 at 18:35):

Mutual TLS isn't exactly easy to configure, first. (this isn't backend to backend - the fhir server is usually a "front end" thing). It's not 1:1, it's 1:many from FHIR's perspective

view this post on Zulip Jenni Syed (Sep 22 2017 at 18:35):

and not everything that connects to the fhir server will use this - SMART apps use the same endpoint

view this post on Zulip Jenni Syed (Sep 22 2017 at 18:38):

Also, it's nice to have something that can be passed throught the stack to prove original identity of caller, if needed (auditing/security logging/etc in non-FHIR based systems)

view this post on Zulip John Moehrke (Sep 22 2017 at 18:54):

I agree with those points.. and have pointed it out https://healthcaresecprivacy.blogspot.com/2016/11/is-iua-oauth-useful-in-service-to.html... They are good points, but not terminal points. Some backends are backend-to-backend and would be easier to configure TLS... Hence why I asked where the differentiation was.

view this post on Zulip Grahame Grieve (Sep 22 2017 at 21:02):

comments:

  • ok I didn't consider the server being hacked.
  • Mutual TLS might not be easy to configure but it's a walk in the park compared to implementing this
  • I'm not sure this counts as truly asymmetric when the server doesn't have to provide cyrpto proof of identity to the client. Not that I really want to do that too
  • I agree that this makes it easier for OAuth and services clients to use the same end-points than mutual TLS - though you could set up mutual TLS just for special token end-point

view this post on Zulip Grahame Grieve (Sep 22 2017 at 21:04):

I think the backend services spec should have a section that discusses 'why not mutual TLS'. And no, I'm not doing a PR for that because I don't know what it should say

view this post on Zulip Brian Postlethwaite (Sep 25 2017 at 04:15):

Debugging that JWT, you can use this great site https://jwt.io/
Does the extract and validate ;)

view this post on Zulip David Keith (Nov 15 2017 at 22:34):

Working in the EDIS space for decades, we're having a hard time understanding why backend services need this complex auth scheme for inter-HCF(Health Care Facility) communication?

Our system exchanges pt related data i.e. drugs, labs, prescriptions,allergies, many others with other vendor's systems within the same secure network within the hospital/UCF/FSED.

We pre-coordinate everything, including IP Addresses, protocols, message formats, any auth if necessary. This is important because when two backend systems communicate, it's an open pipe 24/7/365; continuous data interchange interfaces.

None of the recommendations here even make sense in a backend interface B2B inter-HCF environment.
The only relevant application for this that I can see is for net-to-net interchanges i.e. cloud etc.

This is the way the major players in the industry have exchanged data since digital data exchange began.

I can understand perhaps securing the pipe; although it's redundant in a secure inter-facility network.

When we need to communicate outside the facility, we either send a DIRECT message, or establish a VPN connection prior to send.

view this post on Zulip John Moehrke (Nov 15 2017 at 23:05):

SMART is a security layer that is being developed in HL7, informed by Argonaut. It is NOT a mandate for FHIR. The Security WG has been very careful to support and encourage security/privacy layers, while not mandating any one specific. We ask only that the Risks to Privacy and Security are managed. You have described a way of doing this.

view this post on Zulip John Moehrke (Nov 15 2017 at 23:06):

That said, I do think that using SMART does make sense for backends... It is an alternative and you might find it is a harder alternative to using more blunt security solutions.

view this post on Zulip John Moehrke (Nov 15 2017 at 23:07):

I usually need to defend SMART in a different way... see https://healthcaresecprivacy.blogspot.com/2017/04/fhir-security-model-is-enterprise.html

view this post on Zulip John Moehrke (Nov 15 2017 at 23:08):

You might find the OAuth specification from IHE more helpful for organization-to-organization https://healthcaresecprivacy.blogspot.com/2016/11/is-iua-oauth-useful-in-service-to.html

view this post on Zulip John Moehrke (Nov 15 2017 at 23:10):

and there are possibility to just use a organization-to-organization tunnel (such as Mutually-Authenticated-TLS)

view this post on Zulip John Moehrke (Nov 15 2017 at 23:10):

I have more blog articles at https://healthcaresecprivacy.blogspot.com/p/fhir.html

view this post on Zulip David Keith (Nov 15 2017 at 23:50):

Your treatise on using SSH is interesting... although I make my living in the Windows world I prefer to work with Linux where possible. I have set up SSH tunnels using.... RSA, I think, for scripted transfer of files. It's a very viable option, even on windows with plink... it's just that too few windows techs are familiar with the tech or are willing to set something up.

In all fairness I must point out that establishing the comm link using cert exchange can often take a few seconds. In a high volume messaging environment you either have to batch your messages in a store-and-forward mechanism (which adds complexity to the coding process) or auth for each message, which has the potential to slow down message transfer. This can be a show stopper in a high volume environment.

Still, having worked with and programmed SSH systems in times past it seems like a quite logical choice if implemented properly. Very simple to implement, and completely secure...

view this post on Zulip Josh Mandel (Nov 15 2017 at 23:57):

I think the details of what guarantees we want/need in the SMART backend services API are still up for discussion -- that's why we're running a Connectathon track in January on Bulk Data, which will give implementers and opportunity to try out the specifications and share their experience.

view this post on Zulip Josh Mandel (Nov 16 2017 at 00:05):

@David Keith it sounds like your use case may not be a good fit for the SMART backend services specification (which is separate from the question I raised above about whether the SMART spec is more complex than it needs to be). From the perspective of security design, i would also love to get your take on on the principle that internal services should be secured as though they were public. For example https://research.google.com/pubs/pub43231.html is one example embodying this principle.

view this post on Zulip David Keith (Nov 16 2017 at 00:14):

It's really not. The problem is we as an EDIS are a 'little fish', swimming in a big HIS-centric pond for most of our installations are often subservient to the larger system vendors' approaches; if HIS says proprietary, it's proprietary. If HL7v2 with proprietary mods, so it is. Secure, we must use their designated security protocols.

That's why the smart solutions, which seem to make a lot of sense for individual pt's and clinicians, really don't work in the interface world. But if this is the only approach that an HIS vendor sees as valid due to it being pushed as the optimal or preferred 'standard', we may have to go through a clunky, man hour intensive process to implement this, only to later on down the road go through a remake when everyone figures out that this approach doesn't fit the requirement.

I've had to do this several times, very frustrating as it diverts programming man hours away from far more important tasks.

I'll take a look at your reference and respond.

view this post on Zulip John Moehrke (Nov 16 2017 at 15:01):

I feel I need to clarify my position. I am very much a supporter of SMART. I like it, I think it is a good-enough minimally-viable approach that hits a very large percentage of the need. I am however very much a supporter of other specific specifications. Specific as in as detailed as SMART will be. Specific in that they define their intended use-case and scope, as SMART will have. We should work toward a small set of reasonable security models. Each of these should be well defined and have clear identifier, so that they can be discovered. This pluggable security layers is the model that is in http, OAuth, and other security layers.

view this post on Zulip David Keith (Nov 16 2017 at 20:02):

@Josh Mandel
Google's security implementation is quite impressive. It represents the utilization of existing technologies, many of which have been around for decades, in a functional way to manage security risk.
Having served in IT Management, Network Engineering, Network Administration, Trading Floor Support, and for the last 15+ years as a business s/w developer - 9 years of which have been in support of Healthcare s/w in the hospital ED, and having worked in consulting and full time positions for over 25 businesses, I look at the Google infrastructure as it relates to security simply as '...the way it can be...'.
Meaning, NASA codes at CMM level 5, IBM consulting at CMM level 3, and the vast majority of the world at CMM level.... -1.

The vast majority of businesses - most certainly including the wild, wild west of HIT - may in some isolated instances hit the 'Google-level' of security in 20-30 years.

In the meantime, instead of following the current healthcare standards committee trend of capitalizing on LCD(least common denominator) tech with extremely complex system schemas like OAuth2, HIT needs to discover the capabilities of the OS'es, routers and layer 3 switches that already exist in their current infrastructure.

Likewise, instead of using s/w development tech like MUMPS, CCL, Java, various scripting languages and other inherently insecure tool chains, then trying to work around the insecurities by using Rube Goldberg contraptions like OAuth2, vendors need to get serious about development using tools that have consistently had access to industrial grade security for decades like C++ and Delphi.

The problems that well meaning folks are trying to solve in healthcare - like security, for ex. - were solved decades ago in some cases by tech like the multi-tier stacks available to developers today from companies like AstaTech, RemObjects, Components4Developers (kbmMW), and the various encryption stacks that have been available since the mid '90's in many cases.

Instead of continually seeking to reinvent the wheel, why not learn from Google and other's that are serious about tech security using known secure methods.

In other words instead of trying to make inherently insecure platforms secure - now that we've all been refocused on the need for securing PHI/PII as should have always been the focus, thanks to ransomware attacks on hospitals and other businesses - lets identify those s/w development approaches that are hard to secure and blacklist their use in areas where tight security is paramount.

The current trend seems to be headed in a direction that is bleeding edge for the sake of protecting bad approaches to the implementation of technology in healthcare, when we've had the tech available to us all along to avoid these pitfalls and secure our systems via the use of severely underused technologies that have existed for decades.

view this post on Zulip Kevin Mayfield (Dec 11 2017 at 10:07):

Am I correct in believing the Backend Services isn't one of the 5 Argonaut Use cases?

view this post on Zulip Grahame Grieve (Jun 12 2018 at 22:58):

@Josh Mandel @Dan Gottlieb can we please document in the back end services specification that if the client that is connecting to a server using back end services spec is acting on behalf of a human user, they should identify the user to the back end server with an openid token

view this post on Zulip Grahame Grieve (Jun 12 2018 at 22:58):

this is a question that has come up in multiple contexts for me

view this post on Zulip Grahame Grieve (Jun 12 2018 at 22:59):

and they should do that on each request.

view this post on Zulip Dan Gottlieb (Jun 13 2018 at 16:23):

I opened an issue here: https://github.com/smart-on-fhir/fhir-bulk-data-docs/issues/44

view this post on Zulip Debbie Bucci (Jun 29 2018 at 17:31):

Hi folks - I am not sure where to post but I am curious about the both the bulk upload and backend security pieces and wanted to dig deeper to better understand. I've been following the open API banking spec development very closely and they are suggesting the use of the bearer token in the browser (redirect) is unsafe. Instead of using additional client side certificate (which I think Graham was suggesting for bulk update) they are strongly suggesting MTLS bound with an access token so you can be certain of source address verification. MTLS for OAUTH is in draft - other parts of the spec are moving ahead at a quick pace. When listening to all of this it struck a chord and just wanted to put it out there for consideration.

view this post on Zulip Debbie Bucci (Jun 29 2018 at 17:35):

https://tools.ietf.org/id/draft-ietf-oauth-mtls-07.html Not sure this is most current but its close - and reading above - it seems MTLS is being consider ... do hope this is helpful

view this post on Zulip Josh Mandel (Jun 29 2018 at 17:44):

Thanks @Debbie Bucci . #bulk data is where that discussion is happening. (Briefly: For back-end services we use Bearer tokens that have short life times and are not exposed to end-users. Obtaining a bear token requires the client to demonstrate possession of a private key.)

view this post on Zulip Debbie Bucci (Jun 29 2018 at 18:27):

product key? the client ID given a registration?

view this post on Zulip Josh Mandel (Jun 29 2018 at 18:28):

Typo -- fixed ("private key")

view this post on Zulip Debbie Bucci (Jun 29 2018 at 18:28):

Ok thanks makes sense now


Last updated: Apr 12 2022 at 19:14 UTC