Szybki start: klienci publiczni i poufni (C#)
Podczas tworzenia aplikacji przy użyciu zestawu SDK MIP są używane dwa typowe scenariusze. W pierwszym scenariuszu użytkownik jest uwierzytelniany bezpośrednio w usłudze Azure AD. W drugiej aplikacji jest uwierzytelnianie przy użyciu certyfikatu lub tajnej aplikacji.
Aplikacje klienckie publiczne
Są to aplikacje klasyczne lub mobilne, które monitują użytkownika o uwierzytelnienie. Użytkownik łączy się bezpośrednio z usługami miP zaplecza. W tym scenariuszu należy użyć bibliotek uwierzytelniania, aby zapewnić użytkownikowi możliwość logowania się do usługi Azure AD, spełniania dowolnych wymagań dostępu wieloskładnikowego lub warunkowego oraz uzyskiwania tokenu OAuth2 dla odpowiedniego zasobu.
Aby uzyskać więcej informacji, zobacz dokumentację przepływu uwierzytelniania klienta publicznego.
Poniżej przedstawiono krótki wycinek kodu przedstawiający przepływ uwierzytelniania klienta publicznego dla aplikacji klienckiej Microsoft Information Protection SDK przy użyciu biblioteki uwierzytelniania firmy Microsoft(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;
}
Identyfikator GUID dzierżawy to unikatowy identyfikator GUID dzierżawy dla dzierżawy usługi Azure AD. Identyfikator aplikacji to identyfikator aplikacji w rejestracji aplikacji w portalu usługi Azure AD.
Poufne aplikacje klienckie
Te aplikacje są aplikacjami w chmurze lub usługami, w których użytkownik nie łączy się bezpośrednio z usługami miP zaplecza. Usługa musi oznaczać, chronić lub odszyfrowywać pliki lub inne dane. W tym scenariuszu aplikacja musi przechowywać certyfikat lub klucz tajny aplikacji. Te tajemnice będą używane do uwierzytelniania w usłudze Azure AD i używać tej tajemnicy do pobierania tokenów dla usług MIP zaplecza. Następnie może on chronić lub korzystać z zawartości w imieniu użytkownika za pomocą funkcji delegowania zestawu SDK programu MIP.
Integrowanie zestawu SDK programu MIP z aplikacjami opartymi na usłudze wymaga użycia przepływu przyznawania poświadczeń klienta. Za pomocą biblioteki uwierzytelniania firmy Microsoft (MSAL) można zaimplementować tę metodę we wzorcu podobnym do tego, co zobaczymy w publicznej aplikacji klienckiej. W tym artykule krótko opisano sposób aktualizowania zestawu SDK protokołu MIP w programie .NET w celu przeprowadzenia uwierzytelniania dla aplikacji opartych na usłudze IAuthDelegate przy użyciu tego przepływu. W momencie publikacji nie ma żadnej wersji programu MSAL dla C++, ale można zaimplementować ten przepływ za pośrednictwem bezpośrednich połączeń REST.
Aby uzyskać więcej informacji, zobacz dokumentację przepływu uwierzytelniania klienta poufną
Poniżej przedstawiono krótki wycinek kodu przedstawiający tajny przepływ uwierzytelniania klienta dla aplikacji klienckiej Microsoft Information Protection SDK przy użyciu biblioteki uwierzytelniania firmy Microsoft(MSAL). Aplikacja może uwierzytelnić się przy użyciu certyfikatu usługi AD lub tajnego klienta.
Uwaga
Zwróć szczególną uwagę na ten wiersz w poniższym przykładzie.
string[] scopes = new string[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };
W ten sposób konstruuje się zakresy MSAL z zasobu dostępnego dla AcquireToken() metody.
Przykład klienta poufnego 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;
}
Identyfikator GUID dzierżawy to unikatowy identyfikator GUID dzierżawy dla dzierżawy usługi Azure AD. Identyfikator aplikacji to identyfikator aplikacji w rejestracji aplikacji w portalu usługi Azure AD.