Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Hasta Onayı SMART on FHIR ile Nasıl Uygulanır
Eğitim: SMART on FHIR, OAuth 2.1 ve PKCE ile adım adım — keşif, uygulama kaydı, onay ekranı, token değişimi, uygulanan kapsamlar, yenileme rotasyonu ve geri alma — ve Anpheros'un neleri uyguladığı.
SMART on FHIR, bir uygulamanın bir kişinin FHIR kaydına erişmesi için izin almasının standart yoludur: yetkilendirme için PKCE ile OAuth 2.1, tam olarak neyin okunabileceğini veya yazılabileceğini belirten kapsamlar ve uygulamanın nereye gideceğini bildiren bir keşif belgesi. Bu öğretici, tüm akışı Anpheros'a karşı adım adım curl ile çalıştırır: keşif, bir uygulama kaydetme, kişiyi rıza ekranına gönderme, kodu değiştirme, verilen kapsamlar dahilinde API'yi çağırma, yenileme ve kişinin erişimi iptal ettiğinde ne olacağı. Anpheros, SMART on FHIR arka ucudur: yetkilendirme sunucusunu, rıza ekranını ve FHIR R4 sunucusunu barındırır, böylece kendi oturum açma veya rıza arayüzünüzü yazmazsınız.
Neden API anahtarı yerine onay
Bir API anahtarı, projenizin oluşturduğu hastalara ulaşır. Bir kişinin mevcut kaydı (diğer uygulamalar, klinikler ve laboratuvarlar tarafından toplanan kendi verileri) paylaşabileceği kişiye aittir. SMART on FHIR ile:
- Kişi, hangi uygulamanın, neyi okumak veya yazmak istediğini, hangi amaçla ve ne kadar süreyle istediğini kendi dilinde görür;
- Uygulamanız yalnızca o kaynak türlerini ve eylemleri, yalnızca o tek kayıt için alır;
- Her erişim kaydedilir ve kişi tarafından görülebilir, kişi istediği zaman erişimi iptal edebilir;
- Yetkilendirme ayrıca bir FHIR
Consentkaynağı olarak saklanır.
Bunun arkasındaki model Hasta onayı ile Sağlık Hizmetleri API'si ve Onay ve erişim modeli belgelerinde açıklanmıştır.
Adım 1: Keşif
curl https://platform.anpheros.com/fhir/R4/.well-known/smart-configuration
Yanıt, uç noktaları ve sunucunun neleri desteklediğini listeler (kısaltılmış):
{"issuer": "https://platform.anpheros.com",
"authorization_endpoint": "https://platform.anpheros.com/oauth/authorize",
"token_endpoint": "https://platform.anpheros.com/oauth/token",
"revocation_endpoint": "https://platform.anpheros.com/oauth/revoke",
"code_challenge_methods_supported": ["S256"],
"scopes_supported": ["patient/*.rs", "patient/Patient.r", "patient/Observation.rs", "patient/Observation.rs?category=laboratory",
"patient/Observation.rs?category=vital-signs", "patient/Observation.c", "patient/Condition.rs",
"patient/MedicationStatement.rs", "patient/DocumentReference.rs", "patient/AllergyIntolerance.rs",
"offline_access", "launch/patient", "openid", "fhirUser"],
"capabilities": ["launch-standalone", "client-public", "client-confidential-symmetric", "permission-patient",
"permission-offline", "context-standalone-patient", "sso-openid-connect"]}
SMART istemci kütüphaneleri bu belgeyi okur ve yapılandırılması gereken başka bir şeye ihtiyaç duymaz.
Adım 2: Uygulamanızı Kaydetme
Gösterge Paneli içinde projenizi açın ve yönlendirme URI'si ile bir uygulama ekleyin. Veya Yönetici API'si aracılığıyla:
curl -X POST https://platform.anpheros.com/admin/projects/$PROJECT/applications \
-H "Authorization: Bearer $FIREBASE_ID_TOKEN" -H "Content-Type: application/json" -d '{
"name": "CardioAI", "client_type": "public",
"redirect_uris": ["https://cardio.example/callback"],
"purpose": "cardiology follow-up", "privacy_url": "https://cardio.example/privacy"
}'
{"id": "app_…", "name": "CardioAI", "client_type": "public", "client_id": "client_Hg6CknNkYlMgN190", "client_secret": null,
"redirect_uris": ["https://cardio.example/callback"], "purpose": "cardiology follow-up", "status": "active", …}
Gizli anahtarı tutamayan ve PKCE'ye güvenen mobil ve tarayıcı uygulamaları için public kullanın. Bir sunucu için confidential kullanın; client_secret bir kez gösterilir. İsim, amaç ve gizlilik bağlantısı, kişinin onay ekranında gördüğü bilgilerdir.
Adım 3: kişiyi onay ekranına yönlendirin
Bir PKCE çifti oluşturun. Doğrulayıcı sizde kalır; yalnızca karması iletilir:
VERIFIER=$(openssl rand -base64 64 | tr -d '=+/\n' | cut -c1-64)
CHALLENGE=$(printf %s "$VERIFIER" | openssl dgst -sha256 -binary | openssl base64 | tr '+/' '-_' | tr -d '=')
Ardından bu adresi kişinin tarayıcısında açın (okunabilirlik için satır sonları eklenmiştir):
https://platform.anpheros.com/oauth/authorize?response_type=code
&client_id=client_Hg6CknNkYlMgN190
&redirect_uri=https://cardio.example/callback
&scope=openid fhirUser patient/Observation.rs?category=laboratory patient/Condition.rs offline_access
&state=8c1e… ← a random value you check on return
&code_challenge=$CHALLENGE&code_challenge_method=S256
&purpose=treatment&lang=en
İhtiyacınız olan en az şeyi isteyin. Bu uygulama laboratuvar sonuçlarını ve teşhisleri okur, başka hiçbir şeyi değil. offline_access bir yenileme belirteci verir, böylece kişi her 30 dakikada bir tekrar onaylamak zorunda kalmaz.
Kişi Anpheros'a giriş yapar, isteği açık dilde okur, hangi kaydı paylaşacağını (kendi kaydı, baktığı bir aile üyesinin kaydı veya uygulamanızın kendisi için oluşturduğu kayıt) ve erişimin ne kadar süreceğini seçer, ardından izin verir veya reddeder. Yönlendirme URI'nize geri dönerler:
https://cardio.example/callback?code=…&state=8c1e…
Kodu kullanmadan önce state'in daha önce gönderdiğiniz değerle aynı olduğunu kontrol edin.
Adım 4: Kodu belirteçlerle değiştirin
curl -X POST https://platform.anpheros.com/oauth/token \
-d grant_type=authorization_code -d client_id=client_Hg6CknNkYlMgN190 \
-d code=$CODE -d code_verifier=$VERIFIER -d redirect_uri=https://cardio.example/callback
{"access_token": "at_…", "token_type": "Bearer", "expires_in": 1800,
"scope": "patient/Observation.rs?category=laboratory patient/Condition.rs openid fhirUser offline_access",
"patient": "82bfd321-6a4d-4aea-943a-a62f4d81d419", "grant_id": "grant_…",
"id_token": "eyJ…", "refresh_token": "rt_…"}
scope, neyin verildiğini listeler. Belirteçlerle birlikte tutun ve yalnızca kapsadığı özellikleri gösterin.patient, uygulamanız için kaydın kimliğidir. Eşleşen bir kimliktir: başka bir uygulama aynı kişiyi farklı bir kimlik altında görür.id_token,fhirUsertalebinin hasta kaynağını adlandırdığı bir OpenID Connect belirtecidir.- Kod yalnızca bir kez ve yalnızca eşleşen
code_verifierile çalışır.
Adım 5: API'yi kapsamlar dahilinde çağırma
curl "https://platform.anpheros.com/fhir/R4/Observation?patient=$PATIENT&category=laboratory" -H "Authorization: Bearer $ACCESS_TOKEN"
Laboratuvar sonuçları her zamanki gibi gelir. İlaçlar gibi, izin verilenin dışındaki bir şeyi isteyin:
curl "https://platform.anpheros.com/fhir/R4/MedicationStatement?patient=$PATIENT" -H "Authorization: Bearer $ACCESS_TOKEN"
{"resourceType": "OperationOutcome", "issue": [{"severity": "error", "code": "forbidden",
"diagnostics": "The consent behind this token does not allow 's' on MedicationStatement."}]}
Bu bir 403'dir. İzin verilenler içindeki aramalar da filtrelenir: Observation.rs?category=laboratory ile, tüm gözlemler için yapılan bir arama yalnızca laboratuvar olanları döndürür. Bu belirteç için başka hiçbir hasta mevcut değildir (404). REST görünümü (/v1) ve bağlam API'si aynı kapsamları uygular.
Adım 6: yenileme
Erişim belirteçleri 30 dakika geçerlidir. Yenileme belirteçleri 30 gün geçerlidir ve her kullanımda döndürülür:
curl -X POST https://platform.anpheros.com/oauth/token \
-d grant_type=refresh_token -d client_id=client_Hg6CknNkYlMgN190 -d refresh_token=$REFRESH_TOKEN
Yeni bir erişim belirteci ve yeni bir yenileme belirteci alırsınız. Yenisini hemen saklayın. Eski bir yenileme belirtecinin yeniden kullanılması hırsızlık olarak kabul edilir: 400 ile başarısız olur ve tüm izni iptal eder.
Adım 7: İptal Etme
Kişi, Anpheros'taki erişiminizi istediği zaman iptal edebilir ve siz de, örneğin uygulamanızda bağlantıyı kestiklerinde, kendiniz iptal edebilirsiniz:
curl -X POST https://platform.anpheros.com/oauth/revoke -d token=$REFRESH_TOKEN -d client_id=client_Hg6CknNkYlMgN190
Bundan sonra, o yetkiyle yapılan her çağrı 401 yanıtını verecektir. Bunu, kişinin bağlantının sona erdiğini göstererek ve tekrar bağlanmayı teklif ederek ele alın. Başarısız bir çağrı beklemek zorunda kalmadan öğrenmek için consent.revoked webhook adresine abone olun.
SDK'ler ile
TypeScript ve Dart SDK'leri, 3 ila 6 arasındaki adımları sizin için gerçekleştirir: OAuthFlow.authorizeUrl, PKCE çifti oluşturarak, exchange geri çağırma sırasında ve otomatik yenileme ile rotasyon yaparak. Tam örnekler: FHIR arka ucu ile bir yapay zeka sağlık uygulaması nasıl oluşturulur (TypeScript) ve Flutter ile bir sağlık uygulaması nasıl oluşturulur (Dart).
Anpheros Neler Uyguluyor
| SMART'ın Bölümü | Anpheros'ta |
|---|---|
| Keşif | FHIR tabanında /.well-known/smart-configuration, desteklenen uç noktalar, kapsamlar ve PKCE yöntemleri ile |
| Başlatma | bağımsız başlatma (uygulama başlar, ardından erişim ister); klinik bir sistem içinden EHR başlatma sunulmamaktadır |
| Yetkilendirme | PKCE gerektiren OAuth 2.1, yetkilendirme kodu akışı |
| Kapsamlar | SMART v2 hasta kapsamları, kategori filtreli patient/<Resource>.<cruds>, artı openid ve fhirUser |
| Kimlik | bir FHIR kaynağı olarak hastayı adlandıran bir OpenID Connect id_token |
| Onay | hastanın dilinde barındırılan bir onay ekranı, hastanın seçtiği süre ile, bir FHIR Consent olarak yansıtılır |
| Tokenlar | 30 dakikalık erişim tokenları, onaya bağlı dönen 30 günlük yenileme tokenları, iptal |
| Uyumluluk | yetenek beyanı SMART güvenlik hizmetini beyan eder; Inferno SMART Uygulama Başlatma STU2 test kitinin "Bağımsız Başlatma" grubu 22 testin 22'sini geçer (28 Eylül 2026 çalıştırması); diğer Inferno grupları ve test kitleri çalıştırılmamıştır |
Yazma da aynı şekilde çalışır: kapsamlar (patient/Observation.c, .u, .d) uygulamanızın kayıt içinde oluşturmasına, güncellemesine veya silmesine olanak tanır. Yazılan her şey, yazar olarak uygulamanızı taşır, bir idempotency anahtarıyla denemeler bir ölçümü asla tekrarlamaz ve silmeler yumuşaktır ve geçmişi saklar (Medical data API).
Henüz Neler Yok
- EHR başlatma (bir hastane sistemi içinden bir başlatma bağlamıyla açılan uygulama).
- Arka uç hizmetleri için
system/kapsam; kuruluşlar bunun yerine API anahtarlarını kullanır. - Toplu Veri dışa aktarma (
$export); bir hastaya ilişkin$everythingmevcuttur.
Bunlar, Sürüm Oluşturma ve Devre Dışı Bırakma bölümündeki diğerleriyle birlikte listelenmiştir ve yetenek ifadesi her zaman yetkili kaynaktır.
Sıkça Sorulan Sorular
SMART on FHIR nedir?
OAuth 2.0/2.1 ve OpenID Connect üzerine kurulu açık bir standarttır. Bir uygulamanın bir FHIR kaydına erişim talebinde nasıl bulunacağını, bu erişimi hangi kapsamların tanımladığını ve sunucunun uç noktalarını nasıl duyurduğunu tanımlar. SMART özellikli herhangi bir istemci kütüphanesi, SMART özellikli herhangi bir sunucuyu kullanabilir.
PKCE'ye ihtiyacım var mı?
Evet. Anpheros, hem genel hem de gizli istemciler için her yetkilendirme kodu akışı için S256 ile PKCE gerektirir. Bu, ele geçirilen bir yetkilendirme kodunun başkası tarafından kullanılmasını engeller.
Kişi hayır derse ne olur?
Yönlendirme URI'nize error=access_denied ve state'niz ile ve kod olmadan dönerler. Özelliğin ne gerektirdiğini açıklayın ve tekrar denemelerine izin verin; bir hibe dışındaki çağrılar her zaman 403 ile yanıt verir.
Bir ebeveyn bir çocuk için onay verebilir mi?
Evet. Onay ekranında bir kişi, hesabına bağlıysa çocuğunki gibi ilgilendiği bir kaydı seçebilir. Hibe yalnızca o kayda uygulanır.
İlgili Konular
- Kimlik Doğrulama ve OAuth: API anahtarları, belirteçler ve ömürleri hakkında ayrıntılı bilgi
- Hasta Rızası ile Sağlık API'si: Rızanın uygulamanızın tasarımında ne gibi değişikliklere yol açtığı
- Rıza ve Erişim Modeli
- FHIR Platformu
- Sağlık Uygulaması Oluşturma
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card