Kurz: Přístup k Microsoft Graphu ze zabezpečené aplikace .NET jako uživatel
Zjistěte, jak získat přístup k Microsoft Graphu z webové aplikace spuštěné ve službě Aplikace Azure Service.
Chcete přidat přístup k Microsoft Graphu z webové aplikace a provést nějakou akci jako přihlášený uživatel. Tato část popisuje, jak udělit delegovaná oprávnění webové aplikaci a získat informace o profilu přihlášeného uživatele z ID Microsoft Entra.
V tomto kurzu se naučíte:
- Udělte delegovaná oprávnění webové aplikaci.
- Volání Microsoft Graphu z webové aplikace pro přihlášeného uživatele
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.
Požadavky
- Webová aplikace spuštěná ve službě Aplikace Azure, která má povolený modul ověřování/autorizace služby App Service.
Udělení přístupu front-endu pro volání Microsoft Graphu
Teď, když jste povolili ověřování a autorizaci ve webové aplikaci, je webová aplikace zaregistrovaná na platformě Microsoft Identity Platform a je založená na aplikaci Microsoft Entra. V tomto kroku udělíte webové aplikaci oprávnění pro přístup k Microsoft Graphu pro uživatele. (Technicky vzato udělíte aplikaci Microsoft Entra webové aplikace oprávnění pro přístup k aplikaci Microsoft Graph Microsoft Entra pro uživatele.)
V Centru pro správu Microsoft Entra vyberte Aplikace.
Vyberte Registrace aplikací> Owned applications>View all applications in this directory. Vyberte název webové aplikace a pak vyberte oprávnění rozhraní API.
Vyberte Přidat oprávnění a pak vyberte Rozhraní MICROSOFT API a Microsoft Graph.
Vyberte Delegovaná oprávnění a pak v seznamu vyberte User.Read . Vyberte Přidat oprávnění.
Konfigurace služby App Service tak, aby vracela použitelný přístupový token
Webová aplikace teď má požadovaná oprávnění pro přístup k Microsoft Graphu jako přihlášený uživatel. V tomto kroku nakonfigurujete ověřování a autorizaci služby App Service, abyste získali použitelný přístupový token pro přístup k Microsoft Graphu. V tomto kroku musíte přidat obor User.Read pro podřízenou službu (Microsoft Graph): https://graph.microsoft.com/User.Read
.
Důležité
Pokud službu App Service nenakonfigurujete tak, aby vracela použitelný přístupový token, při volání rozhraní Microsoft Graph API v kódu se zobrazí CompactToken parsing failed with error code: 80049217
chyba.
Přejděte do Azure Resource Exploreru a pomocí stromu prostředků vyhledejte webovou aplikaci. Adresa URL prostředku by měla být podobná https://resources.azure.com/subscriptions/subscriptionId/resourceGroups/SecureWebApp/providers/Microsoft.Web/sites/SecureWebApp20200915115914
.
Průzkumník prostředků Azure se teď otevře s webovou aplikací vybranou ve stromu prostředků.
V horní části stránky vyberte Čtení a zápis , abyste povolili úpravy prostředků Azure.
V levém prohlížeči přejděte k podrobnostem o konfiguraci>authsettingsV2.
V zobrazení authsettingsV2 vyberte Upravit.
Vyhledejte část přihlášení identityProviders ->azureActiveDirectory a přidejte následující nastavení loginParameters:
"loginParameters":[ "response_type=code id_token","scope=openid offline_access profile https://graph.microsoft.com/User.Read" ]
."identityProviders": { "azureActiveDirectory": { "enabled": true, "login": { "loginParameters":[ "response_type=code id_token", "scope=openid offline_access profile https://graph.microsoft.com/User.Read" ] } } } },
Nastavení uložte tak, že vyberete PUT. Toto nastavení může trvat několik minut, než se projeví. Vaše webová aplikace je teď nakonfigurovaná pro přístup k Microsoft Graphu se správným přístupovým tokenem. Pokud ne, Vrátí Microsoft Graph chybu s informací, že formát kompaktního tokenu je nesprávný.
Volání Microsoft Graphu pomocí .NET
Vaše webová aplikace teď má požadovaná oprávnění a také přidá ID klienta Microsoft Graphu do parametrů přihlášení.
Pomocí knihovny Microsoft.Identity.Web získá webová aplikace přístupový token pro ověřování pomocí Microsoft Graphu. Ve verzi 1.2.0 a novější se knihovna Microsoft.Identity.Web integruje a může běžet společně s modulem ověřování/autorizace služby App Service. Microsoft.Identity.Web zjistí, že je webová aplikace hostovaná ve službě App Service, a získá přístupový token z modulu ověřování/autorizace služby App Service. Přístupový token se pak předá ověřeným požadavkům pomocí rozhraní Microsoft Graph API.
Pokud chcete tento kód zobrazit jako součást ukázkové aplikace, podívejte se na:
Poznámka:
Knihovna Microsoft.Identity.Web není ve webové aplikaci nutná k základnímu ověřování nebo autorizaci ani k ověřování požadavků v Microsoft Graphu. Podřízená rozhraní API je možné bezpečně volat pouze s povoleným modulem ověřování a autorizace služby App Service.
Ověřování/autorizace služby App Service je ale navržené pro další základní scénáře ověřování. Pro složitější scénáře (zpracování vlastních deklarací identity, například) potřebujete knihovnu Microsoft.Identity.Web nebo Microsoft Authentication Library. Na začátku je k dispozici trochu více nastavení a konfigurace, ale knihovna Microsoft.Identity.Web může běžet společně s modulem ověřování/autorizace služby App Service. Později, když vaše webová aplikace potřebuje zpracovat složitější scénáře, můžete zakázat modul ověřování/autorizace služby App Service a Microsoft.Identity.Web už bude součástí vaší aplikace.
Instalace balíčků klientské knihovny
Nainstalujte balíčky NuGet Microsoft.Identity.Web a Microsoft.Identity.Web.MicrosoftGraph v projektu pomocí rozhraní příkazového řádku .NET Core nebo konzoly Správce balíčků v sadě Visual Studio.
Příkazový řádek .NET Core
Otevřete příkazový řádek a přepněte do adresáře, který obsahuje váš soubor projektu.
Spusťte příkazy instalace.
dotnet add package Microsoft.Identity.Web.MicrosoftGraph
dotnet add package Microsoft.Identity.Web
Konzola Správce balíčků
Otevřete projekt nebo řešení v sadě Visual Studio a otevřete konzolu pomocí příkazu Nástroje>NuGet Správce balíčků> Správce balíčků Konzola.
Spusťte příkazy instalace.
Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Identity.Web
Startup.cs
V souboru AddMicrosoftIdentityWebApp
Startup.cs metoda přidá do webové aplikace Microsoft.Identity.Web. Metoda AddMicrosoftGraph
přidá podporu Microsoft Graphu. Informace o správě přírůstkového souhlasu a podmíněného přístupu najdete v tomto článku.
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Identity.Web;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
// Some code omitted for brevity.
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
string[] initialScopes = Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
.AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
.AddInMemoryTokenCaches();
services.AddAuthorization(options =>
{
// By default, all incoming requests will be authorized according to the default policy
options.FallbackPolicy = options.DefaultPolicy;
});
services.AddRazorPages()
.AddMvcOptions(options => {})
.AddMicrosoftIdentityUI();
services.AddControllersWithViews()
.AddMicrosoftIdentityUI();
}
}
appsettings.json
AzureAd určuje konfiguraci pro knihovnu Microsoft.Identity.Web. V Centru pro správu Microsoft Entra vyberte aplikace z nabídky portálu a pak vyberte Registrace aplikací. Vyberte registraci aplikace vytvořenou při povolení modulu ověřování/autorizace služby App Service. (Registrace aplikace by měla mít stejný název jako vaše webová aplikace.) ID tenanta a ID klienta najdete na stránce s přehledem registrace aplikace. Název domény najdete na stránce přehledu Microsoft Entra pro vašeho tenanta.
Graph určuje koncový bod Microsoft Graphu a počáteční obory, které aplikace potřebuje.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "[Enter the domain of your tenant, e.g. contoso.onmicrosoft.com]",
"TenantId": "[Enter 'common', or 'organizations' or the Tenant Id (Obtained from the Microsoft Entra admin center. Select 'Endpoints' from the 'App registrations' blade and use the GUID in any of the URLs), e.g. da41245a5-11b3-996c-00a8-4d99re19f292]",
"ClientId": "[Enter the Client Id (Application ID obtained from the Microsoft Entra admin center), e.g. ba74781c2-53c2-442a-97c2-3d60re42f403]",
"ClientSecret": "[Copy the client secret added to the app from the Microsoft Entra admin center]",
"ClientCertificates": [
],
// the following is required to handle Continuous Access Evaluation challenges
"ClientCapabilities": [ "cp1" ],
"CallbackPath": "/signin-oidc"
},
"DownstreamApis": {
"MicrosoftGraph": {
// Specify BaseUrl if you want to use Microsoft graph in a national cloud.
// See https://learn.microsoft.com/graph/deployments#microsoft-graph-and-graph-explorer-service-root-endpoints
// "BaseUrl": "https://graph.microsoft.com/v1.0",
// Set RequestAppToken this to "true" if you want to request an application token (to call graph on
// behalf of the application). The scopes will then automatically
// be ['https://graph.microsoft.com/.default'].
// "RequestAppToken": false
// Set Scopes to request (unless you request an app token).
"Scopes": [ "User.Read" ]
// See https://aka.ms/ms-id-web/downstreamApiOptions for all the properties you can set.
}
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Volání Microsoft Graphu jménem uživatele
Následující příklad ukazuje, jak volat Microsoft Graph jako přihlášeného uživatele a získat některé informace o uživateli. Objekt GraphServiceClient
se vloží do kontroleru a ověřování za vás nakonfiguruje knihovna Microsoft.Identity.Web.
// Index.cshtml.cs
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Graph;
using System.IO;
using Microsoft.Identity.Web;
using Microsoft.Extensions.Logging;
// Some code omitted for brevity.
[AuthorizeForScopes(Scopes = new[] { "User.Read" })]
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly GraphServiceClient _graphServiceClient;
public IndexModel(ILogger<IndexModel> logger, GraphServiceClient graphServiceClient)
{
_logger = logger;
_graphServiceClient = graphServiceClient;
}
public async Task OnGetAsync()
{
try
{
var user = await _graphServiceClient.Me.GetAsync();
ViewData["Me"] = user;
ViewData["name"] = user.DisplayName;
using (var photoStream = await _graphServiceClient.Me.Photo.Content.GetAsync())
{
byte[] photoByte = ((MemoryStream)photoStream).ToArray();
ViewData["photo"] = Convert.ToBase64String(photoByte);
}
}
catch (Exception ex)
{
ViewData["photo"] = null;
}
}
}
Vyčištění prostředků
Pokud jste dokončili všechny kroky v tomto kurzu s více částmi, vytvořili jste plán hostování služby App Service, služby App Service a účet úložiště ve skupině prostředků. Také jste vytvořili registraci aplikace v Microsoft Entra ID. Pokud jste zvolili externí konfiguraci, možná jste vytvořili nového externího tenanta. Pokud už je nepotřebujete, odstraňte tyto prostředky a registraci aplikace, abyste dál nenabídli poplatky.
V tomto kurzu se naučíte:
- Odstraňte prostředky Azure vytvořené během kurzu.
Odstranění skupiny prostředků
Na webu Azure Portal vyberte v nabídce portálu skupiny prostředků a vyberte skupinu prostředků, která obsahuje vaši službu App Service a plán služby App Service.
Výběrem možnosti Odstranit skupinu prostředků odstraňte skupinu prostředků a všechny prostředky.
Spuštění tohoto příkazu může trvat několik minut.
Odstranění registrace aplikace
V Centru pro správu Microsoft Entra vyberte Aplikace> Registrace aplikací. Pak vyberte aplikaci, kterou jste vytvořili.
V přehledu registrace aplikace vyberte Odstranit.
Odstranění externího tenanta
Pokud jste vytvořili nového externího tenanta, můžete ho odstranit. V Centru pro správu Microsoft Entra přejděte do části Správa tenantů Přehled>identit.>
Vyberte tenanta, kterého chcete odstranit, a pak vyberte Odstranit.
Před odstraněním tenanta možná budete muset dokončit požadované akce. Můžete například potřebovat odstranit všechny toky uživatelů a registrace aplikací v tenantovi.
Pokud jste připraveni tenanta odstranit, vyberte Odstranit.
Další kroky
V tomto kurzu jste se naučili, jak:
- Udělte delegovaná oprávnění webové aplikaci.
- Volání Microsoft Graphu z webové aplikace pro přihlášeného uživatele