Kullanıcı Adına (OBO) Yetkilendirilmiş Kimlik Doğrulamayı Yapılandırma

Data API Builder 2.0, Microsoft Entra ID kullanan Microsoft SQL veritabanları için, bazen doğrudan geçirilen kimlik doğrulaması olarak da adlandırılan On-Behalf-Of (OBO) kimlik doğrulamasını destekler. Etkinleştirildiğinde, DAB gelen kullanıcı belirtecini aşağı akış SQL belirteci ile değiştirir, böylece veritabanı gerçek çağıran kullanıcı olarak kimlik doğrulaması yapar.

Standart kimlik doğrulaması ile DAB, çağıranın belirtecini doğrular ancak kendi kimlik bilgilerini (yönetilen kimlik veya bağlantı dizesi) kullanarak veritabanına bağlanır. OBO ile DAB, veritabanının gerçek kullanıcı kimliğini görmesi için bir belirteç değişimi gerçekleştirir.

Uyarı

Bu bölümde açıklanan Veri API'si oluşturucu işlevselliği 2.0 ve sonraki sürümlerde kullanılabilir. Daha fazla bilgi için bkz. Sürüm 2.0'daki yenilikler.

OBO ne zaman kullanılır?

OBO, SQL veritabanının gerçek çağıranın kim olduğunu bilmesi gerektiğinde doğru seçimdir:

Scenario OBO kullanılasın mı?
Kullanıcı kimliğine bağlı satır düzeyi güvenlik ilkeleri Evet
Kullanıcı başına veritabanı erişim günlükleri gerektiren uyumluluk denetimi Evet
Saydam kullanıcı belirlemenin önemli olduğu MCP senaryoları Evet
DAB'nin kendi kimlik bilgileriyle bağlandığı basit API erişimi Hayır
MSSQL olmayan veritabanları Hayır

Önemli

Bugün, OBO yalnızca Entra Kimliğine sahip Microsoft SQL veritabanları için desteklenmektedir.

Önkoşullar

  • Veri API oluşturucusu CLI sürüm 2.0 veya üzeri
  • dab-config.json ile data-source.database-typemssql olarak ayarlanmış
  • Veritabanı için belirteç istemek için uygun API izinlerine sahip bir Entra Id uygulama kaydı
  • DAB tarafından kabul edilen JWT'leri veren bir yukarı akış kimlik sağlayıcısı (Entra Kimliği veya yapılandırdığınız özel bir sağlayıcı)
  • Microsoft Entra Id belirteçlerini kabul etmek üzere yapılandırılmış bir MSSQL veritabanı

Bağlantı dizesi gereksinimi

Önemli

OBO etkinleştirildiğinde, bağlantı dizesi bir anahtar sözcük (örneğinAuthentication=Authentication=Active Directory Managed Identity. Kitaplık, bağlantı dizesinde zaten Microsoft.Data.SqlClient bulunan bir bağlantıda AccessToken ayarlanmışsa bir istisna fırlatır. Yalnızca sunucu, veritabanı ve şifreleme ayarlarını içeren çıplak bir bağlantı dizesi kullanın:

Server=tcp:<server>.database.windows.net,1433;Database=<db>;Encrypt=true;TrustServerCertificate=true

OBO ile DAB 2.0, sistem durumu denetimleri ve iç işlemler için otomatik olarak bir MSI belirteci alır ve kimliği doğrulanmış istekler için kullanıcı başına OBO belirtecini ekler.

1. Adım: Gerekli ortam değişkenlerini ayarlama

DAB, OBO belirteç değişimi için aşağıdaki ortam değişkenlerini okur:

Variable Açıklama
DAB_OBO_CLIENT_ID Entra Id uygulama kaydının uygulama (istemci) kimliği
DAB_OBO_TENANT_ID Entra Id kiracı kimliği
DAB_OBO_CLIENT_SECRET İstemci sırrı için uygulama kaydı
export DAB_OBO_CLIENT_ID="1234-abcd-5678-efgh"
export DAB_OBO_TENANT_ID="abcd-1234-efgh-5678"
export DAB_OBO_CLIENT_SECRET="supersecretvalue"

2. Adım: Veri kaynağını yapılandırma

OBO'yu dab-config.json içindeki data-source bölümünde etkinleştirin. Veri kaynağı olmalıdır mssql.

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "user-delegated-auth": {
      "enabled": true,
      "provider": "EntraId",
      "database-audience": "https://database.windows.net"
    }
  }
}
Mülkiyet Açıklama
enabled OBO'u açar veya kapatır
provider Token değişimi için kimlik sağlayıcısı. Şu anda yalnızca EntraId desteklenmektedir
database-audience Aşağı akış SQL belirtecinin hedef kitlesi (OBO etkinleştirildiğinde gereklidir)

3. Adım: Önbelleğe almayı devre dışı bırakma

OBO yapılandırıldığında önbelleğe alma devre dışı bırakılmalıdır. Her kullanıcı ayrı bir veritabanı bağlantısı aldığından, bir kullanıcının bağlantısından önbelleğe alınan sonuçlar başka bir kullanıcıya sunulmamalıdır.

{
  "runtime": {
    "cache": {
      "enabled": false
    }
  }
}

4. Adım: CLI kullanarak yapılandırma

Ayrıca, OBO'u tamamen CLI'dan da yapılandırabilirsiniz:

dab configure --data-source.database-type mssql
dab configure --runtime.cache.enabled false
dab configure --data-source.user-delegated-auth.enabled true
dab configure --data-source.user-delegated-auth.provider EntraId
dab configure --data-source.user-delegated-auth.database-audience "https://database.windows.net"

Tam yapılandırma örneği

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "user-delegated-auth": {
      "enabled": true,
      "provider": "EntraId",
      "database-audience": "https://database.windows.net"
    }
  },
  "runtime": {
    "cache": {
      "enabled": false
    }
  }
}

Burada SQL_CONNECTION_STRING anahtar sözcüğü olmayan Authentication= çıplak bir bağlantı dizesi olmalıdır; örneğin:

Server=tcp:<server>.database.windows.net,1433;Database=<db>;Encrypt=true;TrustServerCertificate=true

Kullanıcı başına bağlantı havuzu

OBO etkinleştirildiğinde, DAB kullanıcı başına ayrı SQL bağlantı havuzları tutar, böylece bir kullanıcının erişim belirteci hiçbir zaman başka bir kullanıcının isteği için yeniden kullanılmaz. Satır düzeyi güvenlik kimin bağlı olduğuna bağlı olduğunda, kullanıcılar arasında bağlantının yeniden kullanılmasının sessizce yanlış erişim vermediğinden emin olabilirsiniz.

Uyarı

OBO kullanırken, SQL bağlantı dizesi uygulama adı alanına koyabileceğiniz tüm özel değerler kesilebilir.