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.
Şunlar için geçerlidir:
İş gücü kiracıları (daha fazla bilgi edinin)
Gizli istemci uygulaması için belirteç edinme
Kullanıcı etkileşimi olmadan çalışan Daemon uygulamaları ve diğer gizli istemci uygulamaları, yalnızca uygulama erişim belirteçleri almak için OAuth 2.0 istemci kimlik bilgileri akışını kullanır. Bu makalede gerekli kapsamları yapılandırma, belirteç almak için API'yi (veya platform eşdeğerini) çağırma AcquireTokenForClient ve sık karşılaşılan hataları giderme işlemleri açıklanır. Devam etmeden önce gizli bir istemci uygulaması oluşturduğunuzdan emin olun.
İstekte bulunacak kapsamlar
İstemci kimlik bilgisi akışı için istekte bulunacak kapsam, kaynağın adı ve ardından /.defaultgelen adıdır.
/.default gösterimi, Microsoft Entra ID'ye uygulama kaydı sırasında statik olarak tanımlanan uygulama düzeyi izinlerini kullanmasını söyler. Ayrıca, bu API izinleri bir kiracı yöneticisi tarafından verilmelidir.
Bir appsettings.json dosyasında yapılandırmanın bir parçası olarak web API'sinin kapsamlarını tanımlama örneği aşağıda verilmiştir. Bu örnek GitHub'da .NET konsol daemon kodu örneğinden alınmıştır.
{
"AzureAd": {
// Same AzureAd section as before.
},
"MyWebApi": {
"BaseUrl": "https://localhost:44372/",
"RelativePath": "api/TodoList",
"RequestAppToken": true,
"Scopes": [ "[Enter here the scopes for your web API]" ]
}
}
Azure AD (v1.0) kaynakları
İstemci kimlik bilgileri için kullanılan kapsam her zaman kaynak kimliği ve ardından /.defaultolmalıdır.
Önemli
MSAL, sürüm 1.0 erişim belirtecini kabul eden bir kaynak için erişim belirteci istediğinde, Microsoft Entra ID istenen kapsamdan hedef kitleyi ayrıştırarak, son eğik çizgiden önceki kısmı alır ve kaynak tanımlayıcısı olarak kullanır.
Bu nedenle, Azure SQL Veritabanı ()https://database.windows.net gibi kaynak eğik çizgiyle biten bir hedef kitle bekliyorsa (Azure SQL Veritabanı https://database.windows.net/için) kapsamı https://database.windows.net//.defaultistemeniz gerekir. (Çift eğik çizgiye dikkat edin.) Ayrıca bkz. MSAL.NET sorun #747: Resource url's trailing slash is omitted, which caused sql auth failure.
AcquireTokenForClient API'si
Uygulamaya belirteç almak için, platforma bağlı olarak AcquireTokenForClient veya eşdeğerini kullanın.
Microsoft.Identity.Web ile doğrudan belirteç edinmeniz gerekmez. Bir daemon uygulamasından web API'sini çağırma bölümünde gördüğünüz gibi daha üst düzey API'ler kullanabilirsiniz. Ancak belirteç gerektiren bir SDK kullanıyorsanız, aşağıdaki örnekte gösterildiği gibi soyutlama aracılığıyla ITokenAcquirer bir uygulama belirteci alabilirsiniz:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;
// In the Program.cs, acquire a token for your downstream API
var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
ITokenAcquirer acquirer = tokenAcquirerFactory.GetTokenAcquirer();
AcquireTokenResult tokenResult = await acquirer.GetTokenForUserAsync(new[] { "https://graph.microsoft.com/.default" });
string accessToken = tokenResult.AccessToken;
Protokol
Seçtiğiniz dil için henüz bir kitaplığınız yoksa protokolü doğrudan kullanmak isteyebilirsiniz:
İlk durum: Paylaşılan gizli anahtar kullanarak jeton isteğine erişme
POST /{tenant}/oauth2/v2.0/token HTTP/1.1 //Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=A1b-C2d_E3f.H4i,J5k?L6m!N7o-P8q_R9s.T0u
&grant_type=client_credentials
İkinci durum: Sertifika kullanarak belirteç isteğine erişme
POST /{tenant}/oauth2/v2.0/token HTTP/1.1 // Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_id=11112222-bbbb-3333-cccc-4444dddd5555
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=aaaaaaaa-0b0b-...
&grant_type=client_credentials
Daha fazla bilgi için protokol belgelerine bakın: Microsoft kimlik platformu ve OAuth 2.0 istemci kimlik bilgileri akışı.
Sorun giderme
resource/.default kapsamını kullandınız mı?
Geçersiz bir kapsam kullandığınızı belirten bir hata iletisi alırsanız, büyük olasılıkla resource/.default kapsamını hatalı kullandınız.
Yönetici onayı sağlamayı unuttun mu? Daemon uygulamalarının buna ihtiyacı var!
API'yi çağırdığınızda "İşlemi tamamlamak için yetersiz ayrıcalık" hatası alırsanız, kiracı yöneticisinin uygulamaya izin vermesi gerekir.
Uygulamanıza yönetici onayı vermezseniz, API aşağıdaki örneğe benzer bir hata yanıtı döndürür:
Failed to call the web API: Forbidden
Content: {
"error": {
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
"innerError": {
"request-id": "<guid>",
"date": "<date>"
}
}
}
Role bağlı olarak aşağıdaki seçeneklerden birini belirleyin.
Bulut Uygulaması Yöneticisi
Bulut Uygulaması Yöneticisi için Microsoft Entra yönetim merkezinde Kurumsal uygulamalar'a gidin. Uygulama kaydını seçin ve sol bölmenin Güvenlik bölümünden İzinler'i seçin. Ardından {Kiracı Adı} için yönetici onayı ver etiketli büyük düğmeyi seçin (burada {Kiracı Adı}, dizinin adıdır).
Standart kullanıcı
Kiracınızın standart bir kullanıcısı için Bulut Uygulaması Yöneticisinden uygulamaya yönetici onayı vermesini isteyin. Onay istemek için, yöneticiyi aşağıdaki yönetici onayı uç noktası URL'sine yönlendirin:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
URL'de:
- değerini
Enter_the_Tenant_Id_Herekiracı kimliği veya kiracı adıyla değiştirin (örneğin,contoso.microsoft.com). -
Enter_the_Application_Id_Here, kayıtlı uygulamanın uygulama (istemci) kimliğidir.
AADSTS50011: No reply address is registered for the application Hata, yukarıdaki URL'yi kullanarak uygulamaya onay verdikten sonra görüntülenebilir. Uygulamanın AADSTS50011 ve URL'nin yeniden yönlendirme URI'si olmadığından hata oluşur. Bu hatayı gönül rahatlığıyla yoksayabilirsiniz.
Kendi API'nizi mi çağırıyorsunuz?
Daemon uygulamanız kendi web API'nizi çağırıyorsa ve daemon'un uygulama kaydına uygulama izni ekleyemediyseniz web API'sinin uygulama kaydına uygulama rolleri eklemeniz gerekir.
Sonraki adımlar
Bu senaryoda web API'sini çağırma adlı sonraki makaleye geçin.