AnpherosAnpheros PlatformDevelopers

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:

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_…"}

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

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

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy