1Çevrimiçi Hizmetler için Evrensel Lisans Koşulları, Genel önizlemedeki kitaplıklar için geçerlidir.
Yetkiliyi yapılandırma
Daemon uygulamaları, temsilci izinleri yerine uygulama izinlerini kullanır. Bu nedenle, desteklenen hesap türü herhangi bir kuruluş dizininde veya kişisel Microsoft hesabında (örneğin, Skype, Xbox, Outlook.com) bir hesap olamaz. Microsoft kişisel hesabı için bir daemon uygulamasına onay vermek için kiracı yöneticisi yoktur. Kuruluşumdaki hesapları veya herhangi bir kuruluştaki hesapları seçmeniz gerekiyor.
Uygulama yapılandırmasında belirtilen yetkili kiracılı olmalıdır (kiracı kimliği veya kuruluşunuzla ilişkilendirilmiş bir etki alanı adı belirtilmelidir).
Çok kiracılı bir araç sağlamak isteseniz bile, hizmet hangi kiracının kullanılması gerektiğini güvenilir bir şekilde çıkaramadığından, bu akışla değilcommon, kiracı kimliği veya organizations etki alanı adı kullanmalısınız.
Uygulamayı yapılandırma ve örneği oluşturma
MSAL kitaplıklarında, gizli istemci kimlik bilgileri (gizli veya sertifika) gizli istemci uygulaması oluşturma parametresi olarak geçirilir.
Önemli
Uygulamanız hizmet olarak çalışan bir konsol uygulaması olsa bile, bu bir daemon uygulamasıysa gizli bir istemci uygulaması olmalıdır.
Yapılandırma dosyası
Yapılandırma dosyası şunları tanımlar:
Birlikte yetkiliyi oluşturan bulut örneği ve kiracı kimliği.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
"ClientId": "[Enter here the ClientId for your application]",
"ClientCredentials": [
{
"SourceType": "ClientSecret",
"ClientSecret": "[Enter here a client secret for your application]"
}
]
}
}
# Credentials
TENANT_ID=Enter_the_Tenant_Info_Here
CLIENT_ID=Enter_the_Application_Id_Here
// You provide either a ClientSecret or a CertificateConfiguration, or a ClientAssertion. These settings are exclusive
CLIENT_SECRET=Enter_the_Client_Secret_Here
CERTIFICATE_THUMBPRINT=Enter_the_certificate_thumbprint_Here
CERTIFICATE_PRIVATE_KEY=Enter_the_certificate_private_key_Here
CLIENT_ASSERTION=Enter_the_Assertion_String_Here
# Endpoints
// the Azure AD endpoint is the authority endpoint for token issuance
AAD_ENDPOINT=Enter_the_Cloud_Instance_Id_Here // https://login.microsoftonline.com/
// the graph endpoint is the application ID URI of Microsoft Graph
GRAPH_ENDPOINT=Enter_the_Graph_Endpoint_Here // https://graph.microsoft.com/
İstemci gizli dizileriyle gizli bir istemci oluşturduğunuzda Python daemon örneğindeki parameters.json yapılandırma dosyası aşağıdaki gibidir:
{
"authority": "https://login.microsoftonline.com/<your_tenant_id>",
"client_id": "your_client_id",
"scope": [ "https://graph.microsoft.com/.default" ],
"secret": "The secret generated by Azure AD during your confidential app registration",
"endpoint": "https://graph.microsoft.com/v1.0/users"
}
Sertifikalarla gizli bir istemci oluşturduğunuzda Python daemon örneğindeki parameters.json yapılandırma dosyası aşağıdaki gibidir:
{
"authority": "https://login.microsoftonline.com/<your_tenant_id>",
"client_id": "your_client_id",
"scope": [ "https://graph.microsoft.com/.default" ],
"thumbprint": "790E... The thumbprint generated by Azure AD when you upload your public cert",
"private_key_file": "server.pem",
"endpoint": "https://graph.microsoft.com/v1.0/users"
}
{
"Instance": "https://login.microsoftonline.com/{0}",
"Tenant": "[Enter here the tenantID or domain name for your Azure AD tenant]",
"ClientId": "[Enter here the ClientId for your application]",
"ClientSecret": "[Enter here a client secret for your application]",
"CertificateName": "[Or instead of client secret: Enter here the name of a certificate (from the user cert store) as registered with your application]"
}
bir veya CertificateNamesağlarsınızClientSecret. Bu ayarlar özeldir.
MSAL uygulamasının örneğini oluşturma
MSAL uygulamasının örneğini açmak için MSAL paketini ekleyin, başvurun veya içeri aktarın (dile bağlı olarak).
yapı, istemci gizli dizilerini veya sertifikalarını (veya gelişmiş bir senaryo olarak imzalı onayları) kullanıp kullanmadığınıza bağlı olarak farklıdır.
Uygulamanıza Microsoft.Identity.Web.TokenAcquisition NuGet paketini ekleyin.
Alternatif olarak, Microsoft Graph'ı çağırmak istiyorsanız Microsoft.Identity.Web.GraphServiceClient paketini ekleyin.
Projeniz aşağıdaki gibi olabilir. appsettings.json dosyasının çıkış dizinine kopyalanması gerekir.
class Program
{
static async Task Main(string[] _)
{
// Get the Token acquirer factory instance. By default it reads an appsettings.json
// file if it exists in the same folder as the app (make sure that the
// "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
// Configure the application options to be read from the configuration
// and add the services you need (Graph, token cache)
IServiceCollection services = tokenAcquirerFactory.Services;
services.AddMicrosoftGraph();
// By default, you get an in-memory token cache.
// For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization
// Resolve the dependency injection.
var serviceProvider = tokenAcquirerFactory.Build();
// ...
}
}
# Pass the parameters.json file as an argument to this Python script. E.g.: python your_py_file.py parameters.json
config = json.load(open(sys.argv[1]))
# Create a preferably long-lived app instance that maintains a token cache.
app = msal.ConfidentialClientApplication(
config["client_id"], authority=config["authority"],
client_credential=config["secret"],
# token_cache=... # Default cache is in memory only.
# You can learn how to use SerializableTokenCache from
# https://msal-python.rtfd.io/en/latest/#msal.SerializableTokenCache
)
Authority, bulut örneğinin ve kiracı kimliğinin birleştirilmiş bir sonucudur, örneğin https://login.microsoftonline.com/contoso.onmicrosoft.com veya https://login.microsoftonline.com/eb1ed152-0000-0000-0000-32401f3f9abd. Yapılandırma dosyası bölümünde gösterilen appsettings.json dosyasında, örnek ve kiracı sırasıyla ve Tenant değerleriyle Instance temsil edilir.
Önceki kod parçacığının alındığı kod örneğinde AuthenticationConfig Authority sınıfındaki bir özelliktir ve şöyle tanımlanır:
/// <summary>
/// URL of the authority
/// </summary>
public string Authority
{
get
{
return String.Format(CultureInfo.InvariantCulture, Instance, Tenant);
}
}
Gizli istemci uygulamasının örneğini bir istemci sertifikasıyla oluşturma
Kodun kendisi tamamen aynıdır. Sertifika yapılandırmada açıklanmıştır.
Sertifikayı almanın birçok yolu vardır. Ayrıntılar için bkz. https://aka.ms/ms-id-web-certificates.
Sertifikanızı KeyVault'tan almak için şunları yapabilirsiniz. Microsoft identity, Azure Identity'in DefaultAzureCredential'ını temsil eder ve KeyVault'tan sertifikaya erişmek için kullanılabilir olduğunda Yönetilen kimliği kullanır. Uygulamanızda, geliştirici kimlik bilgilerinizi kullandığından yerel olarak hata ayıklayabilirsiniz.
MSAL Java'da, gizli istemci uygulamasının örneğini sertifikalarla oluşturmak için iki oluşturucu vardır:
InputStream pkcs12Certificate = ... ; /* Containing PCKS12-formatted certificate*/
string certificatePassword = ... ; /* Contains the password to access the certificate */
IClientCredential credential = ClientCredentialFactory.createFromCertificate(pkcs12Certificate, certificatePassword);
ConfidentialClientApplication cca =
ConfidentialClientApplication
.builder(CLIENT_ID, credential)
.authority(AUTHORITY)
.build();
veya
PrivateKey key = getPrivateKey(); /* RSA private key to sign the assertion */
X509Certificate publicCertificate = getPublicCertificate(); /* x509 public certificate used as a thumbprint */
IClientCredential credential = ClientCredentialFactory.createFromCertificate(key, publicCertificate);
ConfidentialClientApplication cca =
ConfidentialClientApplication
.builder(CLIENT_ID, credential)
.authority(AUTHORITY)
.build();
const config = {
auth: {
clientId: process.env.CLIENT_ID,
authority: process.env.AAD_ENDPOINT + process.env.TENANT_ID,
clientCertificate: {
thumbprint: process.env.CERTIFICATE_THUMBPRINT, // a 40-digit hexadecimal string
privateKey: process.env.CERTIFICATE_PRIVATE_KEY,
}
}
};
// Create an MSAL application object
const cca = new msal.ConfidentialClientApplication(config);
Ayrıntılar için bkz . MSAL Düğümü ile sertifika kimlik bilgilerini kullanma.
# Pass the parameters.json file as an argument to this Python script. E.g.: python your_py_file.py parameters.json
config = json.load(open(sys.argv[1]))
# Create a preferably long-lived app instance that maintains a token cache.
app = msal.ConfidentialClientApplication(
config["client_id"], authority=config["authority"],
client_credential={"thumbprint": config["thumbprint"], "private_key": open(config['private_key_file']).read()},
# token_cache=... # Default cache is in memory only.
# You can learn how to use SerializableTokenCache from
# https://msal-python.rtfd.io/en/latest/#msal.SerializableTokenCache
)
Gizli istemci uygulamaları, istemci gizli dizisini veya sertifikayı kullanmanın yanı sıra istemci onaylarını kullanarak da kimliklerini kanıtlayabilir. Ayrıntılar için bkz . CredentialDescription .
MSAL Python'da, bu ConfidentialClientApplication'nin özel anahtarı tarafından imzalanacak talepleri kullanarak istemci talepleri sağlayabilirsiniz.
# Pass the parameters.json file as an argument to this Python script. E.g.: python your_py_file.py parameters.json
config = json.load(open(sys.argv[1]))
# Create a preferably long-lived app instance that maintains a token cache.
app = msal.ConfidentialClientApplication(
config["client_id"], authority=config["authority"],
client_credential={"thumbprint": config["thumbprint"], "private_key": open(config['private_key_file']).read()},
client_claims = {"client_ip": "x.x.x.x"}
# token_cache=... # Default cache is in memory only.
# You can learn how to use SerializableTokenCache from
# https://msal-python.rtfd.io/en/latest/#msal.SerializableTokenCache
)
Ayrıntılar için ConfidentialClientApplication için MSAL Python başvuru belgelerine bakın.
Gizli istemci uygulaması, istemci gizli dizisi veya sertifika yerine istemci onaylarını kullanarak kimliğini de kanıtlayabilir.
MSAL.NET gizli istemci uygulamasına imzalı onaylar sağlamak için iki yöntemi vardır:
.WithClientAssertion()
.WithClientClaims()
kullanırken WithClientAssertionimzalı bir JWT sağlayın. Bu gelişmiş senaryo, İstemci onaylarında ayrıntılı olarak anlatılır.
kullandığınızda WithClientClaims, MSAL.NET Microsoft Entra Id tarafından beklenen talepleri ve göndermek istediğiniz ek istemci taleplerini içeren imzalı bir onay oluşturur.
Bu kod bunun nasıl yapılacağını gösterir: