Aplikace démona používají oprávnění aplikace místo delegovaných oprávnění. Podporovaný typ účtu proto nemůže být účtem v žádném organizačním adresáři ani v žádném osobním účtu Microsoft (například Skype, Xbox, Outlook.com). Neexistuje žádný správce tenanta, který by udělil souhlas s aplikací démona pro osobní účet Microsoft. Potřebujete zvolit účty v mé organizaci nebo účtech v libovolné organizaci.
Autorita zadaná v konfiguraci aplikace by měla být tenantována (zadání ID tenanta nebo názvu domény přidruženého k vaší organizaci).
I když chcete poskytnout nástroj pro více tenantů, měli byste použít ID tenanta nebo název domény, a necommon nebo organizations s tímto tokem, protože služba nemůže spolehlivě odvodit, který tenant by se měl použít.
Konfigurace a vytvoření instance aplikace
V knihovnách MSAL se přihlašovací údaje klienta (tajný klíč nebo certifikát) předávají jako parametr výstavby důvěrných klientských aplikací.
Důležité
I když je vaše aplikace konzolovou aplikací, která běží jako služba, pokud se jedná o aplikaci démona, musí to být důvěrná klientská aplikace.
Konfigurační soubor
Konfigurační soubor definuje:
Cloudová instance a ID tenanta, které společně tvoří autoritu.
ID klienta, které jste získali z registrace aplikace.
{
"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/
{
"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"
}
{
"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]"
}
Zadáte buď aClientSecret, nebo .CertificateName Tato nastavení jsou exkluzivní.
Vytvoření instance aplikace MSAL
Vytvoření instance aplikace MSAL, přidání, odkaz nebo import balíčku MSAL (v závislosti na jazyce).
Konstrukce se liší v závislosti na tom, jestli používáte tajné kódy klienta nebo certifikáty (nebo jako pokročilý scénář podepsané kontrolní výrazy).
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
)
Jedná Authority se o zřetězení instance cloudu a ID tenanta, například https://login.microsoftonline.com/contoso.onmicrosoft.comhttps://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee. V souboru appsettings.json zobrazeném v části Konfigurační soubor jsou instance a tenant reprezentovány Instance hodnotami a Tenant hodnotami.
V ukázce kódu, ze které byl předchozí fragment kódu převzat, Authority je vlastnost třídy AuthenticationConfig a je definována takto:
/// <summary>
/// URL of the authority
/// </summary>
public string Authority
{
get
{
return String.Format(CultureInfo.InvariantCulture, Instance, Tenant);
}
}
Vytvoření instance důvěrné klientské aplikace pomocí klientského certifikátu
Tady je kód pro sestavení aplikace s certifikátem:
Samotný kód je úplně stejný. Certifikát je popsaný v konfiguraci.
Certifikát můžete získat mnoha způsoby. Podrobnosti najdete v tématu https://aka.ms/ms-id-web-certificates.
Tady je postup, jak získat certifikát ze služby KeyVault. Identita Microsoftu deleguje na defaultAzureCredential služby Azure Identity a používá spravovanou identitu, pokud je k dispozici pro přístup k certifikátu z keyVaultu. Aplikaci můžete ladit místně, protože pak použije vaše přihlašovací údaje pro vývojáře.
# 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
)
Kromě použití tajného klíče klienta nebo certifikátu můžou důvěrné klientské aplikace také prokázat svou identitu pomocí klientských kontrolních výrazů. Podrobnosti najdete v tématu CredentialDescription .
Podrobnosti najdete v tématu Inicializace objektu ConfidentialClientApplication.
V MSAL Pythonu můžete poskytnout deklarace identity klientů pomocí deklarací identity, které budou podepsány tímto ConfidentialClientApplicationprivátním klíčem.
# 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
)
Při použití WithClientClaimsMSAL.NET vytvoří podepsaný kontrolní výraz, který obsahuje deklarace identity očekávané id Microsoft Entra a další deklarace identity klienta, které chcete odeslat.
Tento kód ukazuje, jak to udělat: