Veri API'si oluşturucusunda yetkilendirme ve roller
Veri API'si oluşturucusu rol tabanlı yetkilendirme iş akışı kullanır. Kimliği doğrulanmış veya doğrulanmamış tüm gelen istekler bir role atanır. Roller, Sistem Rolleri veya Kullanıcı Rolleri olabilir. Atanan rol daha sonra istenen varlıkta söz konusu rol için hangi eylemlerin, alanların ve ilkelerin kullanılabilir olduğunu anlamak için yapılandırma dosyasında belirtilen tanımlı izinlere göre denetlenebilir.
Roller
Roller, bir isteğin yürütülmesi gereken izin bağlamını ayarlar. Çalışma zamanı yapılandırmasında tanımlanan her varlık için, varlığa hem REST hem de GraphQL uç noktalarında nasıl erişilebileceğini belirleyen bir rol kümesi ve ilişkili izinler tanımlayabilirsiniz.
Veri API oluşturucusu istekleri tek bir rol bağlamında değerlendirir:
anonymous
hiçbir erişim belirteci sunulmadığında.authenticated
geçerli bir erişim belirteci sunulduğunda.<CUSTOM_USER_ROLE>
geçerli bir erişim belirteci sunulduğundaX-MS-API-ROLE
ve HTTP üst bilgisi eklendiğinde, erişim belirtecininroles
talebine de dahil olan bir kullanıcı rolü belirtilir.
Roller eklenebilir değildir, yani her ikisinin de üyesi olan ve Role2
her iki Role1
rolle ilişkili izinleri devralmayan bir kullanıcı.
Sistem rolleri
Sistem rolleri, Veri API'si oluşturucusu tarafından tanınan yerleşik rollerdir. Sistem rolü, istek sahibinin erişim belirteçlerinde belirtilen rol üyeliğine bakılmaksızın istek sahibine otomatik olarak atanır. İki sistem rolü vardır: anonymous
ve authenticated
.
Anonim sistem rolü
Sistem anonymous
rolü kimliği doğrulanmamış kullanıcılar tarafından yürütülen isteklere atanır. Kimliği doğrulanmamış erişim isteniyorsa çalışma zamanı yapılandırması tanımlı varlıklar rol için anonymous
izinler içermelidir.
Örnek
Aşağıdaki Veri API'si oluşturucu çalışma zamanı yapılandırması, sistem rolünün anonymous
Book varlığına okuma erişimi içerecek şekilde açıkça yapılandırılmasını gösterir:
"Book": {
"source": "books",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ]
}
]
}
İstemci uygulaması kimliği doğrulanmamış bir kullanıcı adına Book varlığına erişen bir istek gönderdiğinde, uygulama HTTP üst bilgisini içermemelidir Authorization
.
Kimliği doğrulanmış sistem rolü
Sistem authenticated
rolü, kimliği doğrulanmış kullanıcılar tarafından yürütülen isteklere atanır.
Örnek
Aşağıdaki Veri API'si oluşturucu çalışma zamanı yapılandırması, sistem rolünün authenticated
Book varlığına okuma erişimi içerecek şekilde açıkça yapılandırılmasını gösterir:
"Book": {
"source": "books",
"permissions": [
{
"role": "authenticated",
"actions": [ "read" ]
}
]
}
Kullanıcı rolleri
Kullanıcı rolleri, çalışma zamanı yapılandırmasında ayarladığınız kimlik sağlayıcısındaki kullanıcılara atanan sistem dışı rollerdir. Veri API oluşturucusunun bir isteği kullanıcı rolü bağlamında değerlendirmesi için iki gereksinimin karşılanması gerekir:
- İstemci uygulaması tarafından sağlanan erişim belirteci, kullanıcının rol üyeliğini listeleyen rol taleplerini içermelidir.
- İstemci uygulamasının isteklerle BIRLIKTE HTTP üst bilgisini
X-MS-API-ROLE
içermesi ve üst bilginin değerini istenen kullanıcı rolü olarak ayarlaması gerekir.
Rol değerlendirme örneği
Aşağıdaki örnek, Veri API oluşturucusu çalışma zamanı yapılandırmasında yapılandırılan varlığa yapılan Book
istekleri aşağıda gösterildiği gibi gösterir:
"Book": {
"source": "books",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ]
},
{
"role": "authenticated",
"actions": [ "read" ]
},
{
"role": "author",
"actions": [ "read" ]
}
]
}
Static Web Apps'da, kullanıcı varsayılan olarak anonim rolün bir üyesidir. Kullanıcının kimliği doğrulanırsa, kullanıcı hem hem authenticated
de anonymous
rollerinin üyesi olur.
İstemci uygulaması, Static Web Apps veritabanı bağlantıları (Önizleme) kullanılarak dağıtılan Veri API oluşturucusuna kimliği doğrulanmış bir istek gönderdiğinde, istemci uygulaması Static Web Apps JSON'a dönüştürülen bir erişim belirteci sağlar:
{
"identityProvider": "azuread",
"userId": "d75b260a64504067bfc5b2905e3b8182",
"userDetails": "username",
"userRoles": ["anonymous", "authenticated", "author"]
}
Veri API oluşturucusu istekleri tek bir rol bağlamında değerlendirdiğinden, isteği varsayılan olarak sistem rolü authenticated
bağlamında değerlendirir.
İstemci uygulamasının isteği değeriyle author
HTTP üst bilgisini X-MS-API-ROLE
de içeriyorsa, istek rol bağlamında author
değerlendirilir. Erişim belirteci ve X-MS-API-ROLE
HTTP üst bilgisi içeren örnek istek:
curl -k -r GET -H 'Authorization: Bearer ey...' -H 'X-MS-API-ROLE: author' https://localhost:5001/api/Book
Önemli
Sağlanan erişim belirtecinin roles
talebi üst bilgide X-MS-API-ROLE
listelenen rolü içermediğinde istemci uygulamasının isteği reddedilir.
İzinler
İzinler şu şekilde açıklanmaktadır:
- Bir varlıkta rol üyeliğine göre kim istekte bulunabilir?
- Kullanıcının gerçekleştirebileceği eylemler (oluşturma, okuma, güncelleştirme, silme, yürütme)
- Belirli bir eylem için hangi alanlara erişilebilir?
- İstek tarafından döndürülen sonuçlarda hangi ek kısıtlamalar vardır?
İzinleri tanımlama söz dizimi çalışma zamanı yapılandırma makalesinde açıklanmıştır.
Önemli
Tek bir varlığın izin yapılandırmasında tanımlanan birden çok rol olabilir. Ancak, istek yalnızca tek bir rol bağlamında değerlendirilir:
- Varsayılan olarak, sistem rolü
anonymous
veyaauthenticated
- Eklendiğinde, HTTP üst bilgisinde
X-MS-API-ROLE
ayarlanan rol.
Varsayılan olarak güvenli
Varsayılan olarak, bir varlığın yapılandırılmış izinleri yoktur ve başka bir deyişle hiç kimse varlığa erişemez. Buna ek olarak, Veri API oluşturucusu çalışma zamanı yapılandırmasında başvurulmadığında veritabanı nesnelerini yoksayar.
İzinlerin açıkça yapılandırılması gerekir
Bir varlığa kimliği doğrulanmamış erişime izin vermek için rolün anonymous
varlığın izinlerinde açıkça tanımlanması gerekir. Örneğin, varlığın book
izinleri kimliği doğrulanmamış okuma erişimine izin verecek şekilde açıkça ayarlanır:
"book": {
"source": "dbo.books",
"permissions": [{
"role": "anonymous",
"actions": [ "read" ]
}]
}
Bir varlık üzerindeki izin tanımını basitleştirmek için rol için authenticated
belirli izinler yoksa rol için anonymous
tanımlanan izinlerin kullanıldığını varsayalım. Daha book
önce gösterilen yapılandırma, anonim veya kimliği doğrulanmış tüm kullanıcıların varlık üzerinde okuma işlemleri gerçekleştirmesine book
izin verir.
Okuma işlemlerinin yalnızca kimliği doğrulanmış kullanıcılarla kısıtlanması gerektiğinde, aşağıdaki izin yapılandırması ayarlanmalıdır ve bu da kimliği doğrulanmamış isteklerin reddedilmesine neden olur:
"book": {
"source": "dbo.books",
"permissions": [{
"role": "authenticated",
"actions": [ "read" ]
}]
}
Varlık gerektirmez ve ve authenticated
rolleri için anonymous
izinlerle önceden yapılandırılmaz. Bir varlığın izin yapılandırmasında bir veya daha fazla kullanıcı rolü tanımlanabilir ve tanımlanamayan diğer tüm roller, sistem veya kullanıcı tanımlı rollerin erişimi otomatik olarak reddedilir.
Aşağıdaki örnekte, varlık için book
tek tanımlı rol kullanıcı rolüdüradministrator
. Kullanıcının rolün administrator
üyesi olması ve varlıkta çalışması için bu rolü X-MS-API-ROLE
HTTP üst bilgisine dahil etmesi book
gerekir:
"book": {
"source": "dbo.books",
"permissions": [{
"role": "administrator",
"actions": [ "*" ]
}]
}
Not
Azure Cosmos DB ile Veri API oluşturucusu kullanırken GraphQL sorgularında erişim denetimini zorunlu kılmak için sağlanan GraphQL şema dosyanızda yönergesini @authorize
kullanmanız gerekir.
Ancak GraphQL sorgularındaki GraphQL mutasyonları ve filtreleri için erişim denetimi daha önce açıklandığı gibi izin yapılandırması tarafından yine de zorunlu kılınıyor.
Eylemler
Eylemler , bir rolün kapsamındaki bir varlığın erişilebilirliğini açıklar. Eylemler tek tek veya joker karakter kısayoluyla belirtilebilir: *
(yıldız işareti). Joker karakter kısayolu, varlık türü için desteklenen tüm eylemleri temsil eder:
- Tablolar ve Görünümler:
create
,read
,update
,delete
- Saklı Yordamlar:
execute
Eylemler hakkında daha fazla bilgi için yapılandırma dosyası belgelerine bakın.
Alan erişimi
Bir eylem için hangi alanların erişilebilir olacağını yapılandırabilirsiniz. Örneğin, eyleme dahil etmek ve eylemden read
dışlamak için hangi alanları ayarlayabilirsiniz.
Aşağıdaki örnek roldeki free-access
kullanıcıların üzerinde Column3
okuma işlemleri gerçekleştirmesini engeller. GET isteklerinde (REST uç noktası) veya sorgularda (GraphQL uç noktası) başvurular Column3
reddedilen bir istekle sonuçlanır:
"book": {
"source": "dbo.books",
"permissions": [
{
"role": "free-access",
"actions": [
"create",
"update",
"delete",
{
"action": "read",
"fields": {
"include": [ "Column1", "Column2" ],
"exclude": [ "Column3" ]
}
}
]
}
]
}
Not
Azure Cosmos DB ile Veri API oluşturucusu kullanırken GraphQL sorgularında erişim denetimini zorunlu kılmak için sağlanan GraphQL şema dosyanızda yönergesini @authorize
kullanmanız gerekir. Ancak GraphQL sorgularındaki GraphQL mutasyonları ve filtreleri için erişim denetimi yine de burada açıklandığı gibi izin yapılandırması tarafından zorlanır.
Öğe düzeyi güvenlik
Veritabanı ilkesi ifadeleri, sonuçların daha da kısıtlanmalarını sağlar. Veritabanı ilkeleri, ifadeleri veritabanında yürütülen sorgu koşullarını çevirir. Veritabanı ilkesi ifadeleri aşağıdaki eylemler için desteklenir:
- oluşturmaya
- okuma
- update
- delete
Uyarı
Saklı yordamlarla kullanılan yürütme eylemi, veritabanı ilkelerini desteklemez .
Not
Veritabanı ilkeleri şu anda NoSQL için CosmosDB tarafından desteklenmemektedir.
Veritabanı ilkeleri hakkında daha fazla bilgi için yapılandırma dosyası belgelerine bakın.
Örnek
Roldeki read
consumer
eylemi yalnızca başlığın "Örnek Başlık" olduğu kayıtları döndürecek şekilde kısıtlayan bir veritabanı ilkesi.
{
"role": "consumer",
"actions": [
{
"action": "read",
"policy": {
"database": "@item.title eq 'Sample Title'"
}
}
]
}