Ana içeriğe geç

Caller Role Provider Yapılandırması New v0.0.88

vNext, yetkilendirme kararlarının (transition roles, availableIn[].roles, queryRoles, schema x-roles) girdisi olan çağıranın rol kümesini artık takılabilir bir provider üzerinden çözer. Provider seçimi başlangıçta bir kez yapılır ve process boyunca sabittir — istek bazında değişmez.

{
"CallerRoleProvider": {
"Provider": "default",
"MorphIdm": {
"BaseUrl": "",
"GetRolesPath": "/api/1/morph-idm/functions/get-roles",
"TimeoutSeconds": 5,
"MaxRetryAttempts": 1,
"RetryDelayMilliseconds": 200,
"CircuitBreakerFailureThreshold": 20,
"CircuitBreakerTimeoutSeconds": 30,
"ValidateSsl": true
}
}
}

Alanlar

AnahtarTipVarsayılanAçıklama
Providerdefault | morph-idmdefaultAşağıdaki enum tablosuna bakın. Tanınmayan bir değer startup'ı düşürmez, default'a geriler
MorphIdm.BaseUrlstring""morph-idm servisinin base URL'i (ör. https://idm.internal). Yalnızca Provider: morph-idm iken kullanılır
MorphIdm.GetRolesPathstring/api/1/morph-idm/functions/get-rolesBaseUrl'e eklenen operasyon-seti endpoint yolu
MorphIdm.TimeoutSecondsinteger5İstek timeout'u. Kısa tutulur — bu çağrı her yetkili okumanın kritik yolundadır; yavaş bir provider, bekleyen çağıran için ret ile ayırt edilemez
MorphIdm.MaxRetryAttemptsinteger1Geçici hatada yeniden deneme sayısı
MorphIdm.RetryDelayMillisecondsinteger200Denemeler arası taban gecikme (üstel artar)
MorphIdm.CircuitBreakerFailureThresholdinteger20Circuit'in açılması için ardışık geçici hata sayısı
MorphIdm.CircuitBreakerTimeoutSecondsinteger30Circuit'in açık kaldığı süre
MorphIdm.ValidateSslbooleantrueTLS sertifika doğrulaması. Yalnızca development'ta kapatılmalıdır

Provider Enum Değerleri

DeğerAçıklama
defaultICurrentUser.Roles / role header'a dayanan eski davranış — hiçbir değişiklik yok
morph-idmRequest scope başına tek morph-idm çağrısı yapar

default Davranışı

Rolleri ICurrentUser.Roles'tan okur, yoksa role header'ına düşer. Bu, provider mekanizmasından önceki davranışla birebir aynıdır — mevcut bir dağıtımda CallerRoleProvider bölümü hiç tanımlanmasa da hiçbir şey değişmez.

morph-idm Davranışı

  • Request scope başına tek GET çağrısı yapılır (GetRolesPath); yanıt scope içinde memoize edilir (birden fazla yüzey — ör. subflow okumaları — eşzamanlı olarak rol isteyebilir, bunlar tek çağrıyı paylaşır).
  • İstek sub, act_sub ve position taşır; role header'ı asla gönderilmez — bu header gönderilirse endpoint "authorize" moduna geçip tek bir rol için evet/hayır yanıtı verir, oysa runtime'ın mevcut grant motorunun (RoleGrantEvaluator) değerlendirebilmesi için tüm operasyon setine ihtiyacı vardır.
  • Dönen operasyon kümesi, yerel grant motoruyla aynı şekilde değerlendirilir: transition.roles, availableIn[].roles, queryRoles, function.roles ve schema x-roles semantiği değişmez — yalnızca girdi kaynağı değişir.
  • Fail-closed: provider hata döndürürse (timeout, 5xx, ayrıştırılamayan yanıt) yetkilendirme 403 ile reddedilir; hata da scope içinde memoize edilir — başarısız bir scope reddedilmiş kalır ve morph-idm'i scope başına en fazla bir kez çağırır.
  • 204 No Content veya boş gövde, "bu çağıranın operasyon seti boş" anlamına gelir (hata değil) — [] döner.

:::warning Custom function çağrılarında function.roles artık gate değil v0.0.88 itibarıyla custom function çağrılarını yetkilendirmek middle-tier'ın sorumluluğudur; vNext'in işi görünürlük (discovery yanıtlarında roles'un görünmesi) ve authorize fonksiyonudur. function.roles, artık yalnızca authorize fonksiyonu tarafından değerlendirilir — doğrudan function çağrısında bir gate olarak kullanılmaz. Scope kontrolü (Domain/Flow/Instance) değişmeden kalır; bu, yetkilendirme değil call-shape doğrulamasıdır. Ayrıntı için bkz. Authorization → Çağıran rollerinin çözümlenmesi. :::

İlgili

  • Authorization — grant değerlendirme çekirdeği, roles/queryRoles/x-roles semantiği
  • Built-in Functions — State/Data Function yetkilendirme davranışı