Rychlý start: Veřejný a důvěrný klient (C#)

Při sestavování aplikací pomocí sady MIP SDK se používají dva běžné scénáře. V prvním scénáři se uživatel přímo ověřuje vůči ID Microsoft Entra. Za druhé se aplikace ověřuje pomocí tajného kódu aplikace nebo certifikátu.

Veřejné klientské aplikace

Tyto aplikace jsou desktopové nebo mobilní aplikace, které uživatele vyzve k ověření. Uživatel se připojí přímo ke službám MIP back-endu. V tomto scénáři by se měly použít knihovny ověřování k zajištění, že se uživatel může přihlásit k ID Microsoft Entra, splňuje všechny požadavky na vícefaktorový nebo podmíněný přístup a získá token OAuth2 pro příslušný prostředek.

Další informace najdete v dokumentaci k toku ověřování veřejného klienta.

Následuje rychlý výnip kódu, který demonstruje tok ověřování veřejného klienta pro klientskou aplikaci sady Microsoft Information Protection SDK pomocí knihovny Identity a ověřování Microsoftu (MSAL).


public string AcquireToken(Identity identity, string authority, string resource, string claims)
{
     var authorityUri = new Uri(authority);
     // 
     authority = String.Format("https://{0}/{1}", authorityUri.Host, "<Tenant-GUID>");

     _app = PublicClientApplicationBuilder.Create("<Application-Id>")
                                          .WithAuthority(authority)
                                          .WithDefaultRedirectUri()
                                          .Build();

     var accounts = (_app.GetAccountsAsync())
                    .GetAwaiter()
                    .GetResult();

     // Append .default to the resource passed in to AcquireToken().     
     string[] scopes = new string[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };
     var result = _app.AcquireTokenInteractive(scopes)
                      .WithAccount(accounts.FirstOrDefault())
                      .WithPrompt(Prompt.SelectAccount)
                      .ExecuteAsync()
                      .ConfigureAwait(false)
                      .GetAwaiter()
                      .GetResult();

     return result.AccessToken;
}

Guid tenanta je jedinečný identifikátor GUID tenanta pro tenanta Microsoft Entra. ID aplikace je ID aplikace v registraci aplikace v Centru pro správu Microsoft Entra.

Důvěrné klientské aplikace

Tyto aplikace jsou cloudové nebo aplikace založené na službách, kde se uživatel přímo nepřipojí ke službám MIP back-endu. Služba musí označit, chránit nebo dešifrovat soubory nebo jiná data. V tomto scénáři musí aplikace uložit certifikát nebo tajný klíč aplikace. Tyto tajné kódy se použijí k ověřování pro ID Microsoft Entra a tento tajný kód použijete k načtení tokenů pro back-endové služby MIP. Potom může používat funkce delegování sady MIP SDK k ochraně nebo využívání obsahu jménem uživatele.

Integrace sady MIP SDK s aplikacemi založenými na službě vyžaduje použití toku udělení přihlašovacích údajů klienta. Knihovnu MICROSOFT Authentication Library (MSAL) je možné použít k implementaci v modelu podobném tomu, co bychom viděli ve veřejné klientské aplikaci. Tento článek stručně popisuje, jak aktualizovat sadu MIP SDK IAuthDelegate v .NET tak, aby prováděla ověřování pro aplikace založené na službách pomocí tohoto toku. V době publikování neexistuje žádná verze knihovny MSAL pro jazyk C++, je však možné tento tok implementovat prostřednictvím přímých volání REST.

Další informace najdete v dokumentaci k toku ověřování důvěrných klientů.

Následuje rychlý úryvek kódu, který demonstruje tok ověřování důvěrného klienta pro ukázkovou aplikaci sady Microsoft Information Protection SDK pomocí knihovny Identity a ověřování Microsoftu (MSAL). Aplikace se může ověřit pomocí certifikátu AD nebo tajného klíče klienta.

Poznámka:

Věnujte zvláštní pozornost tomuto řádku v následujícím vzorku.

string[] scopes = new string[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };

Tím se vytvoří obory MSAL z prostředku poskytnutého metodě AcquireToken() .

Příklad důvěrného klienta MSAL

public string AcquireToken(Identity identity, string authority, string resource, string claim)
{
     AuthenticationResult result;
     var authorityUri = new Uri(authority);
     authority = string.Format("https://{0}/{1}", authorityUri.Host, "<Tenant-GUID>");

     // Certification Based Auth
     if (doCertAuth)
     {
          // Build ConfidentialClientApplication using certificate.
          _app = ConfidentialClientApplicationBuilder.Create("<Application-Id>")
               .WithCertificate(certificate) //Assumption here is Application passes a certificate created using certificate thumbprint
               .WithAuthority(new Uri(authority))
               .Build();
     }

     // Client secret based Auth
     else
     {
          // Build ConfidentialClientApplication using app secret
          _app = ConfidentialClientApplicationBuilder.Create("<Application-Id>")
               .WithClientSecret(clientSecret)
               .WithAuthority(new Uri(authority))
               .Build();
     }

     // Append .default to the resource passed in to AcquireToken().
     string[] scopes = new string[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };

     try{
          result = _app.AcquireTokenForClient(scopes).ExecuteAsync().Result;
     }
     catch (MsalServiceException ex) when (ex.Message.Contains("AADSTS70011"))
     {
          // Invalid scope. The scope has to be of the form "https://resourceurl/.default"
          // Mitigation: change the scope to be as expected
          Console.WriteLine("Scope provided is not supported");
          return null;
     }
            return result.AccessToken;
}

Guid tenanta je jedinečný identifikátor GUID tenanta pro tenanta Microsoft Entra. ID aplikace je ID aplikace v registraci aplikace v Centru pro správu Microsoft Entra.