Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Veri API oluşturucusu, JSON Web Belirteci (JWT) doğrulamasını kullanarak Özel kimlik doğrulama sağlayıcısı aracılığıyla üçüncü taraf kimlik sağlayıcılarını destekler. Kuruluşunuz Okta, Auth0 veya başka bir OAuth 2.0/OpenID Connect uyumlu kimlik sağlayıcısı kullanıyorsa bu yaklaşımı kullanın.
Kimlik doğrulama akışı
Özel bir kimlik sağlayıcısıyla istemci uygulamanız kullanıcı kimlik doğrulamasını işler ve ardından erişim belirtecini Veri API'sinin oluşturucusna gönderir:
| Phase | Ne olur? |
|---|---|
| Kullanıcı kimlik doğrulaması | Kullanıcı kimlik sağlayıcısı aracılığıyla oturum açar (Okta, Auth0 vb.) |
| Jeton edinimi | İstemci uygulaması IdP'den erişim belirteci alır |
| API çağrısı | İstemci, belirteci üst bilgi başlığındaki Authorization DAB'ye gönderir. |
| Doğrulama | DAB, JWT'yi (veren, hedef kitle, imza) doğrular |
| Authorization | DAB rolleri ayıklar ve izinleri değerlendirir |
Önkoşullar
- Kimlik sağlayıcınızla bir hesap (Okta, Auth0 vb.)
- Kimlik sağlayıcınıza kayıtlı bir uygulama
- Data API builder CLI yüklü (yükleme kılavuzu)
- En az bir varlığa sahip mevcut
dab-config.json
Hızlı referans
| Setting | Değer |
|---|---|
| Provider | Custom |
| Doğrulama için gerekli |
iss, aud, exp, geçerli imza |
| Yetkilendirme için gerekli |
roles seçilen rolü içeren talep |
| Token üst bilgisi | Authorization: Bearer <token> |
| Rol talep türü |
roles (düzeltildi, yapılandırılamaz) |
| Rol seçimi başlığı | X-MS-API-ROLE |
1. Adım: Kimlik sağlayıcınızı yapılandırma
Tam adımlar sağlayıcınıza bağlıdır. İhtiyacınız olan temel değerler şunlardır:
Toplayacak değerler
| Değer | Nerede bulunur? | Kullanım amacı |
|---|---|---|
| İssuer URL'si | Sağlayıcının belgeleri veya OAuth meta veri uç noktası | DAB jwt.issuer (JWT Yetkilisi olarak kullanılır) |
| Seyirci | Uygulamanızın istemci kimliği veya özel API tanımlayıcısı | DAB jwt.audience |
Uyarı
DAB, JWT jwt.issuer olarak yapılandırılan öğesini kullanır. İmzalama anahtarları standart OpenID Connect meta verileri (genellikle <issuer>/.well-known/openid-configuration) aracılığıyla otomatik olarak bulunur.
Okta örneği
- Okta Yönetim Konsolu'nda oturum açın.
- Uygulamalar>Uygulamaları'na gidin.
- Bir uygulama oluşturun veya seçin.
- İstemci Kimliğini not edin (hedef kitle olarak kullanın).
- Vereniniz genellikle
https://<your-domain>.okta.comolur.
Auth0 örneği
- Auth0 Panosu'nda oturum açın.
- Uygulamalar>API'lerine gidin.
- API oluşturun veya seçin.
- Tanımlayıcıyı not edin (hedef kitle olarak kullanın).
- Vereniniz şeklindedir
https://<your-tenant>.auth0.com/.
Önemli
Veri API oluşturucusu, rol tabanlı yetkilendirme için sabit talep türü roles kullanır. Bu değer yapılandırılamaz. Kimlik sağlayıcınız farklı bir talepte (örneğin groups veya permissions) roller yayınlıyorsa, sağlayıcınızı aynı zamanda bir roles talebi de yayınlayacak şekilde yapılandırmanız veya bir roles talebine değerleri kopyalamak için oturum açma sonrası bir eylem kullanmanız gerekir.
2. Adım: Veri API'si oluşturucusunu yapılandırma
Kimlik doğrulama sağlayıcısını Custom olarak ayarlayın ve JWT ayarlarını yapılandırın:
CLI
# Set the authentication provider
dab configure \
--runtime.host.authentication.provider Custom
# Set the expected audience
dab configure \
--runtime.host.authentication.jwt.audience "<your-api-identifier>"
# Set the expected issuer
dab configure \
--runtime.host.authentication.jwt.issuer "https://<your-issuer>/"
Sonuçta elde edilen yapılandırma
{
"runtime": {
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<your-api-identifier>",
"issuer": "https://<your-issuer>/"
}
}
}
}
}
3. Adım: Varlık izinlerini yapılandırma
Kimlik sağlayıcınızın atadığına ilişkin roller için izinleri tanımlayın:
CLI
# Allow authenticated users to read
dab update Book \
--permissions "authenticated:read"
# Allow users with 'admin' role full access
dab update Book \
--permissions "admin:*"
Sonuçta elde edilen yapılandırma
{
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "admin",
"actions": ["*"]
}
]
}
}
}
4. Adım: Kimlik sağlayıcınızdaki rolleri yapılandırma
DAB, bir roles talepteki rolleri önemser. Kimlik sağlayıcınızı bu talebi içerecek şekilde yapılandırın.
Okta: Grupları rol olarak ekleme
- Okta Yönetim Konsolu'nda Güvenlik>API'sine gidin.
- Yetkilendirme sunucunuzu seçin.
- Talepler sekmesine gidin.
- Talep ekleyin:
-
İsim:
roles - Belirteç türüne ekle: Erişim Belirteci
- Değer türü: Gruplar
- Filtre: Eklenecek grupları seçin
-
İsim:
Auth0: Eylem ile rol ekleme
- Auth0 Pano'da Eylemler>Kitaplık bölümüne gidin.
- Yeni bir Eylem oluşturun (Oturum Açma Sonrası tetikleyicisi).
- Rolleri eklemek için kod ekleyin:
exports.onExecutePostLogin = async (event, api) => {
const roles = event.authorization?.roles || [];
if (roles.length > 0) {
api.accessToken.setCustomClaim('roles', roles);
}
};
- Eylemi dağıtın ve Oturum Açma akışınıza ekleyin.
Tavsiye
Okta ile JWT taleplerini yapılandırma hakkında ayrıntılı yönergeler için bkz. Okta'dan döndürülen belirteçleri özelleştirme.
5. Adım: Yapılandırmayı test edin
Veri API'si oluşturucusunu başlatma:
dab startKimlik sağlayıcınızdan bir belirteç alın. Sağlayıcınızın SDK'sını veya Postman gibi bir aracı kullanın.
Doğrulamak için jwt.io belirteci inceleyin:
- İddia
audyapılandırılmış hedef kitlenizle uyuşuyor. - Talep,
issyapılandırılan vereninizle eşleşir - Talep
rolesbeklenen değerleri içerir
- İddia
API'yi çağırın:
curl -X GET "http://localhost:5000/api/Book" \ -H "Authorization: Bearer <your-token>"Özel rol kullanmak için
X-MS-API-ROLEüst bilgisini ekleyin.curl -X GET "http://localhost:5000/api/Book" \ -H "Authorization: Bearer <your-token>" \ -H "X-MS-API-ROLE: admin"
JWT doğrulama ayrıntıları
Veri API'sinin oluşturucusu, JWT'nin şu yönlerini doğrular:
| Kontrol | Açıklama |
|---|---|
| İmza | Yapılandırılmış jwt.issuer yetkilendirme aracılığıyla bulunan imzalama anahtarları kullanılarak doğrulama yapıldı (OpenID Connect meta verileri veya JSON Web Anahtarı Kümesi (JWKS)). |
| İhraç Eden | Yapılandırmayla tam olarak eşleşmelidir jwt.issuer |
| Seyirci | Yapılandırmayla tam olarak eşleşmelidir jwt.audience |
| Bitiş tarihi | Jeton süresi dolmamalıdır (exp talep) |
| Daha Önce Değil | Belirteç, eğer mevcutsa (nbf iddiası), geçerli olmalıdır. |
Sorun giderme
| Belirti | Olası nedeni | Çözüm |
|---|---|---|
401 Unauthorized |
İhraççı uyuşmazlığı | İddianın tam olarak eşleştiğini kontrol edin (sondaki eğik çizgi dahil) |
401 Unauthorized |
hedef kitle uyuşmazlığı | Talebin aud yapılandırılan değerinizle eşleşir olup olmadığını denetleyin |
401 Unauthorized |
Belirtecin süresi doldu | Yeni bir belirteç edinin |
401 Unauthorized |
Meta veriler kullanılamıyor | DAB'in ulaşabildiğinden emin olun <issuer>/.well-known/openid-configuration |
403 Forbidden |
Rol belirteçte değil | Rolü IdP yapılandırmanıza ekleme |
403 Forbidden |
roles talep bulunamadı |
IdP'nizi bir roles talebi içerecek şekilde yapılandırın |
403 Forbidden |
Yanlış talep adı | DAB talep türünü roles kullanır (düzeltildi, yapılandırılamaz) |
Önemli
DAB şu anda tüm rol denetimleri için talep türünü roles kullanır. Bu değer sabit kodlanmıştır ve groups, permissions veya diğer talep adları olarak değiştirilemez. Kimlik sağlayıcınızı roles adlı bir talepteki rolleri yaymak için yapılandırın.
Yaygın veren biçimleri
| Provider | Veren biçimi |
|---|---|
| Okta |
https://<domain>.okta.com veya https://<domain>.okta.com/oauth2/default |
| Kimlik Doğrulaması0 |
https://<tenant>.auth0.com/ (sondaki eğik çizgiyi not edin) |
| Azure AD B2C | https://<tenant>.b2clogin.com/<tenant-id>/v2.0/ |
| Keycloak | https://<host>/realms/<realm> |
Yapılandırmayı tamamlama örneği
Okta yapılandırması
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')"
},
"runtime": {
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "0oa1234567890abcdef",
"issuer": "https://dev-12345.okta.com"
}
}
}
},
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "editor",
"actions": ["create", "read", "update"]
}
]
}
}
}
Auth0 yapılandırması
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')"
},
"runtime": {
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "https://my-api.example.com",
"issuer": "https://my-tenant.auth0.com/"
}
}
}
},
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "admin",
"actions": ["*"]
}
]
}
}
}