First, everything I'm about to say is not specific to Cerner development -- nothing we're doing with SMART or FHIR is proprietary. I just want to make that clear. :)
OAuth (and specifically in this context, OAuth 2) is an authorization framework used by many different companies & products. For instance,
Google,
Twitter,
PayPal, and
Microsoft all use OAuth 2 to authorize access to their resources (eg, APIs).
SMART is a framework that defines how we can build interoperable healthcare applications. At a high level, SMART outlines three things:
1. SMART communicates the EHR FHIR server URL to the SMART app being launched. This will ultimately allow the SMART app to call that FHIR server to read/write data from the EHR
2. SMART dictates that the FHIR server resources should be protected by an EHR authorization server leveraging OAuth 2.
3. SMART defines how the EHR shares context (what patient chart is open, what encounter is open, what user is logged in) with the 3rd party application. This context sharing model is defined in a secure manner and piggy backs onto the OAuth 2 workflow.
Cerner supports SMART on top of our EHR, Millennium. Let's say that another EHR provider, Acme, also support SMART. This means that both Cerner and Acme are talking the same authorization model (OAuth 2), using the same data model (FHIR), and sharing context in the same manner (see SMART item #3 above). Thus, a SMART app will be interoperable with both Cerner and Acme EHRs and their application code shouldn't have any Cerner specific or Acme specific code.
Of course, there are lots of little details which make this not as easy/simple as I've described things thus far. However, we have work with other companies and vendors to make this a reality. At HIMSS last year we demonstrated several SMART applications written by some great companies running on multiple EHRs -- illustrating that interoperability is possible! It's really an exciting time right now in this space.
Could you make an application that leverages FHIR to read/write data from the EHR but isn't a SMART app? Sure, you could. However, you'd need to hard code the FHIR server URL in your app (since you've lost SMART item #1 from above). Additionally, you'd lose the patient context sharing (SMART item #3 from above). There are certain use cases where this is fine (like services/systems without any user interaction), but if your app is used by an end user (provider or patient), SMART is a great framework to leverage.
I hope this all made sense. Let me know if you have any additional questions.
Regards,
Kevin