Megosztás a következőn keresztül:


Oktatóanyag: Hozzáférés a Microsoft Graphhoz egy biztonságos alkalmazásból felhasználóként

Megtudhatja, hogyan érheti el a Microsoft Graphot egy Azure-alkalmazás Service-en futó webalkalmazásból.

Diagram that shows accessing Microsoft Graph.

Szeretne hozzáférést adni a Microsoft Graph-hoz a webalkalmazásból, és valamilyen műveletet kell végrehajtania bejelentkezett felhasználóként. Ez a szakasz azt ismerteti, hogyan adhat delegált engedélyeket a webalkalmazásnak, és hogyan szerezheti be a bejelentkezett felhasználó profiladatait a Microsoft Entra-azonosítóból.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Delegált engedélyek megadása webalkalmazásnak.
  • A Microsoft Graph meghívása egy webalkalmazásból egy bejelentkezett felhasználó számára.

Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.

Előfeltételek

  • A Azure-alkalmazás Service-en futó webalkalmazás, amelyen engedélyezve van az App Service hitelesítési/engedélyezési modulja.

Előtérbeli hozzáférés biztosítása a Microsoft Graph meghívásához

Most, hogy engedélyezte a hitelesítést és az engedélyezést a webalkalmazáson, a webalkalmazás regisztrálva lesz a Microsoft Identitásplatform, és egy Microsoft Entra-alkalmazás is támogatott. Ebben a lépésben engedélyt ad a webalkalmazásnak a Microsoft Graph eléréséhez a felhasználó számára. (Technikailag ön adja meg a webalkalmazás Microsoft Entra-alkalmazásának az engedélyeket a felhasználó Microsoft Graph Microsoft Entra alkalmazásának eléréséhez.)

A Microsoft Entra Felügyeleti központ menüjében válassza az Alkalmazások lehetőséget.

Válassza a Alkalmazásregisztrációk> A>címtárban lévő összes alkalmazás megtekintése lehetőséget. Válassza ki a webalkalmazás nevét, majd válassza ki az API-engedélyeket.

Válassza az Engedély hozzáadása, majd a Microsoft API-k és a Microsoft Graph lehetőséget.

Válassza a Delegált engedélyek lehetőséget, majd válassza a User.Read lehetőséget a listából. Jelölje be az Engedélyek hozzáadása lehetőséget.

Az App Service konfigurálása használható hozzáférési jogkivonat visszaadására

A webalkalmazás rendelkezik a szükséges engedélyekkel ahhoz, hogy bejelentkezett felhasználóként hozzáférjen a Microsoft Graphhoz. Ebben a lépésben úgy konfigurálja az App Service-hitelesítést és -engedélyezést, hogy használható hozzáférési jogkivonatot biztosítson a Microsoft Graph eléréséhez. Ehhez a lépéshez hozzá kell adnia a User.Read hatókört az alsóbb rétegbeli szolgáltatáshoz (Microsoft Graph): https://graph.microsoft.com/User.Read.

Fontos

Ha nem konfigurálja az App Service-t használható hozzáférési jogkivonat visszaadására, hibaüzenet jelenik CompactToken parsing failed with error code: 80049217 meg, amikor meghívja a Microsoft Graph API-kat a kódban.

Nyissa meg az Azure Resource Explorert , és használja az erőforrásfát, keresse meg a webalkalmazást. Az erőforrás URL-címének hasonlónak kell lennie a következőhöz https://resources.azure.com/subscriptions/subscriptionId/resourceGroups/SecureWebApp/providers/Microsoft.Web/sites/SecureWebApp20200915115914: .

Az Azure Resource Explorer ekkor megnyílik, és a webalkalmazás ki van jelölve az erőforrásfában. A lap tetején válassza az Olvasás/Írás lehetőséget az Azure-erőforrások szerkesztésének engedélyezéséhez.

A bal oldali böngészőben részletezzen a konfigurációs>authsettingsV2 fájlhoz.

Az authsettingsV2 nézetben válassza a Szerkesztés lehetőséget. Keresse meg az identityProviders ->azureActiveDirectory bejelentkezési szakaszát, és adja hozzá a következő loginParameters-beállításokat: "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"
        ]
      }
    }
  }
},

Mentse a beállításokat a PUT gombra kattintva. A beállítás érvénybe lépése több percet is igénybe vehet. A webalkalmazás most már úgy van konfigurálva, hogy megfelelő hozzáférési jogkivonattal férhessen hozzá a Microsoft Graphhoz. Ha nem, a Microsoft Graph hibát ad vissza, amely szerint a kompakt jogkivonat formátuma helytelen.

A Microsoft Graph meghívása

A webalkalmazás már rendelkezik a szükséges engedélyekkel, és hozzáadja a Microsoft Graph ügyfél-azonosítóját a bejelentkezési paraméterekhez.

A Microsoft.Identity.Web kódtár használatával a webalkalmazás hozzáférési jogkivonatot kap a Microsoft Graphtal való hitelesítéshez. Az 1.2.0-s és újabb verziókban a Microsoft.Identity.Web kódtár integrálható és futtatható az App Service hitelesítési/engedélyezési moduljával együtt. A Microsoft.Identity.Web észleli, hogy a webalkalmazás az App Service-ben található, és lekéri a hozzáférési jogkivonatot az App Service hitelesítési/engedélyezési moduljából. A hozzáférési jogkivonat ezután a Microsoft Graph API-val hitelesített kérelmeknek lesz átadva.

Ha ezt a kódot egy mintaalkalmazás részeként szeretné megtekinteni, tekintse meg a GitHubon található mintát.

Feljegyzés

A Microsoft.Identity.Web kódtár nem szükséges a webalkalmazásban az alapszintű hitelesítéshez/engedélyezéshez vagy a kérelmek Microsoft Graph-tal való hitelesítéséhez. Az alsóbb rétegbeli API-k biztonságos meghívása csak az App Service hitelesítési/engedélyezési moduljának engedélyezésével lehetséges.

Az App Service-hitelesítés/engedélyezés azonban alapszintű hitelesítési forgatókönyvekhez készült. Összetettebb forgatókönyvekhez (például egyéni jogcímek kezeléséhez) a Microsoft.Identity.Web könyvtárra vagy a Microsoft Authentication Library-re van szükség. Az elején van egy kicsit több beállítási és konfigurációs munka, de a Microsoft.Identity.Web kódtár az App Service hitelesítési/engedélyezési moduljával együtt is futtatható. Később, amikor a webalkalmazásnak összetettebb forgatókönyveket kell kezelnie, letilthatja az App Service hitelesítési/engedélyezési modulját, és a Microsoft.Identity.Web már része lesz az alkalmazásnak.

Ügyfélkódtár-csomagok telepítése

Telepítse a Microsoft.Identity.Web és a Microsoft.Identity.Web.GraphServiceClient NuGet-csomagokat a projektben a .NET parancssori felület (CLI) vagy a Csomagkezelő-konzol használatával a Visual Studióban.

.NET CLI

Nyisson meg egy parancssort, és váltson a projektfájlt tartalmazó könyvtárra.

Futtassa a telepítési parancsokat.

dotnet add package Microsoft.Identity.Web.GraphServiceClient

dotnet add package Microsoft.Identity.Web

Package Manager konzol

Nyissa meg a projektet/megoldást a Visual Studióban, és nyissa meg a konzolt a Tools>NuGet Csomagkezelő> Csomagkezelő Console paranccsal.

Futtassa a telepítési parancsokat.

Install-Package Microsoft.Identity.Web.GraphServiceClient

Install-Package Microsoft.Identity.Web

Startup.cs

A Startup.cs fájlban a metódus hozzáadja a AddMicrosoftIdentityWebApp Microsoft.Identity.Web alkalmazást a webalkalmazáshoz. A AddMicrosoftGraph módszer microsoft graph-támogatást ad hozzá.

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

A Microsoft Entra ID a Microsoft.Identity.Web könyvtár konfigurációját adja meg. A Microsoft Entra Felügyeleti központban válassza az Alkalmazások lehetőséget a portál menüjében, majd válassza a Alkalmazásregisztrációk lehetőséget. Válassza ki az App Service hitelesítési/engedélyezési modul engedélyezésekor létrehozott alkalmazásregisztrációt. (Az alkalmazásregisztrációnak ugyanazzal a névvel kell rendelkeznie, mint a webalkalmazásnak.) A bérlőazonosítót és az ügyfél-azonosítót az alkalmazásregisztráció áttekintési oldalán találja. A tartománynév a bérlő Microsoft Entra áttekintési oldalán található.

A Graph megadja a Microsoft Graph-végpontot és az alkalmazás által igényelt kezdeti hatóköröket.

{
  "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 Entra admin center. Select 'Endpoints' from the 'App registrations' blade and use the GUID in any of the URLs), e.g. aaaabbbb-0000-cccc-1111-dddd2222eeee]",
    "ClientId": "[Enter the Client Id (Application ID obtained from the Microsoft Entra admin center), e.g. 00001111-aaaa-2222-bbbb-3333cccc4444]",
    "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": "*"
}

Index.cshtml.cs

Az alábbi példa bemutatja, hogyan hívhatja meg a Microsoft Graphot bejelentkezett felhasználóként, és hogyan kérhet le néhány felhasználói információt. Az GraphServiceClient objektumot a rendszer a vezérlőbe injektálja, és a Microsoft.Identity.Web könyvtár a hitelesítést konfigurálta Önnek.

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;
        }
    }
}

Az erőforrások eltávolítása

Ha befejezte ezt az oktatóanyagot, és már nincs szüksége a webalkalmazásra vagy a kapcsolódó erőforrásokra, törölje a létrehozott erőforrásokat.

Következő lépések