Aracılığıyla paylaş


Öğretici: Kullanıcı olarak güvenli bir uygulamadan Microsoft Graph'a erişme

Azure Uygulaması Hizmetinde çalışan bir web uygulamasından Microsoft Graph'a erişmeyi öğrenin.

Diagram that shows accessing Microsoft Graph.

Web uygulamanızdan Microsoft Graph'a erişim eklemek ve oturum açmış kullanıcı olarak bazı eylemler gerçekleştirmek istiyorsunuz. Bu bölümde, web uygulamasına temsilci izinleri verme ve oturum açmış kullanıcının profil bilgilerini Microsoft Entra Id'den alma işlemleri açıklanmaktadır.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Bir web uygulaması için temsilci izinleri verme.
  • Oturum açmış bir kullanıcı için web uygulamasından Microsoft Graph'ı arayın.

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Önkoşullar

  • App Service kimlik doğrulaması/yetkilendirme modülü etkinleştirilmiş Azure Uygulaması Hizmeti üzerinde çalışan bir web uygulaması.

Microsoft Graph'ı çağırmak için ön uç erişimi verme

Web uygulamanızda kimlik doğrulama ve yetkilendirmeyi etkinleştirdiğinize göre, web uygulaması Microsoft kimlik platformu kaydedilir ve bir Microsoft Entra uygulaması tarafından desteklenir. Bu adımda, web uygulamasına kullanıcı için Microsoft Graph'a erişme izni verirsiniz. (Teknik olarak, web uygulamasının Microsoft Entra uygulamasına kullanıcı için Microsoft Graph Microsoft Entra uygulamasına erişim izinleri verirsiniz.)

Microsoft Entra yönetim merkezi menüsünde Uygulamalar'ı seçin.

Uygulama kayıtları> Uygulanan uygulamalar>Bu dizindeki tüm uygulamaları görüntüle'yi seçin. Web uygulamanızın adını ve ardından API izinleri'ne tıklayın.

İzin ekle'yi ve ardından Microsoft API'leri ve Microsoft Graph'ı seçin.

Temsilci izinleri'ni ve ardından listeden User.Read öğesini seçin. İzinler ekle'yi seçin.

App Service’i kullanılabilir bir erişim belirteci döndürecek şekilde yapılandırma

Web uygulaması artık oturum açmış kullanıcı olarak Microsoft Graph'a erişmek için gerekli izinlere sahiptir. Bu adımda, App Service kimlik doğrulamasını ve yetkilendirmesini, Microsoft Graph'a erişmek için size kullanılabilir bir erişim belirteci verecek şekilde yapılandıracaksınız. Bu adım için aşağı akış hizmeti (Microsoft Graph) için User.Read kapsamını eklemeniz gerekir: https://graph.microsoft.com/User.Read.

Önemli

App Service'i kullanılabilir bir erişim belirteci döndürecek şekilde yapılandırmazsanız, kodunuzda Microsoft Graph API'lerini çağırdığınızda bir CompactToken parsing failed with error code: 80049217 hata alırsınız.

Azure Kaynak Gezgini'ne gidin ve kaynak ağacını kullanarak web uygulamanızı bulun. Kaynak URL'si ile https://resources.azure.com/subscriptions/subscriptionId/resourceGroups/SecureWebApp/providers/Microsoft.Web/sites/SecureWebApp20200915115914benzer olmalıdır.

Azure Kaynak Gezgini artık kaynak ağacında web uygulamanız seçili olarak açılır. Azure kaynaklarınızın düzenlenmesini etkinleştirmek için sayfanın üst kısmında Okuma/Yazma'yı seçin.

Sol tarayıcıda authsettingsV2 yapılandırmasına >gidin.

authsettingsV2 görünümünde Düzenle'yi seçin. identityProviders ->azureActiveDirectory'ninoturum açma bölümünü bulun ve aşağıdaki loginParameters ayarlarını ekleyin: "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"
        ]
      }
    }
  }
},

PUT'ı seçerek ayarlarınızı kaydedin. Bu ayarın geçerlilik kazanması birkaç dakika sürebilir. Web uygulamanız artık uygun bir erişim belirteci ile Microsoft Graph'a erişecek şekilde yapılandırıldı. Aksi takdirde, Microsoft Graph sıkıştırılmış belirtecin biçiminin yanlış olduğunu belirten bir hata döndürür.

Microsoft Graph'ı arayın

Web uygulamanız artık gerekli izinlere sahiptir ve oturum açma parametrelerine Microsoft Graph'ın istemci kimliğini ekler.

Microsoft.Identity.Web kitaplığını kullanarak, web uygulaması Microsoft Graph ile kimlik doğrulaması için bir erişim belirteci alır. 1.2.0 ve sonraki sürümlerde, Microsoft.Identity.Web kitaplığı ile tümleşir ve App Service kimlik doğrulaması/yetkilendirme modülüyle birlikte çalışabilir. Microsoft.Identity.Web, web uygulamasının App Service'te barındırıldığını algılar ve erişim belirtecini App Service kimlik doğrulaması/yetkilendirme modülünden alır. Daha sonra erişim belirteci Microsoft Graph API'siyle kimliği doğrulanmış isteklere geçirilir.

Bu kodu örnek bir uygulamanın parçası olarak görmek için GitHub'da örneğe bakın.

Not

Temel kimlik doğrulaması/yetkilendirme veya Microsoft Graph ile isteklerin kimliğini doğrulamak için web uygulamanızda Microsoft.Identity.Web kitaplığı gerekli değildir. Yalnızca App Service kimlik doğrulaması/yetkilendirme modülü etkinken aşağı akış API'lerini güvenli bir şekilde çağırmak mümkündür.

Ancak, App Service kimlik doğrulaması/yetkilendirmesi daha temel kimlik doğrulama senaryoları için tasarlanmıştır. Daha karmaşık senaryolar (örneğin, özel talepleri işleme) için Microsoft.Identity.Web kitaplığına veya Microsoft Kimlik Doğrulama Kitaplığı'na ihtiyacınız vardır. Başlangıçta biraz daha fazla kurulum ve yapılandırma çalışması vardır, ancak Microsoft.Identity.Web kitaplığı App Service kimlik doğrulaması/yetkilendirme modülüyle birlikte çalıştırılabilir. Daha sonra web uygulamanızın daha karmaşık senaryoları işlemesi gerektiğinde App Service kimlik doğrulaması/yetkilendirme modülünü devre dışı bırakabilirsiniz ve Microsoft.Identity.Web zaten uygulamanızın bir parçası olacaktır.

İstemci kitaplığı paketlerini yükleme

.NET komut satırı arabirimini (CLI) veya Visual Studio'daki Paket Yöneticisi Konsolu'nu kullanarak projenize Microsoft.Identity.Web ve Microsoft.Identity.Web.GraphServiceClient NuGet paketlerini yükleyin.

.NET CLI

Bir komut satırı açın ve proje dosyanızı içeren dizine geçin.

Yükleme komutlarını çalıştırın.

dotnet add package Microsoft.Identity.Web.GraphServiceClient

dotnet add package Microsoft.Identity.Web

Paket Yöneticisi Konsolu

Visual Studio'da projeyi/çözümü açın ve Araçlar>NuGet Paket Yöneticisi> Paket Yöneticisi Konsolu komutunu kullanarak konsolu açın.

Yükleme komutlarını çalıştırın.

Install-Package Microsoft.Identity.Web.GraphServiceClient

Install-Package Microsoft.Identity.Web

Startup.cs

Startup.cs dosyasında, AddMicrosoftIdentityWebApp yöntemi web uygulamanıza Microsoft.Identity.Web ekler. yöntemi Microsoft AddMicrosoftGraph Graph desteği ekler.

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

Microsoft Entra Id , Microsoft.Identity.Web kitaplığının yapılandırmasını belirtir. Microsoft Entra yönetim merkezinde portal menüsünden Uygulamalar'ı ve ardından Uygulama kayıtları'ı seçin. App Service kimlik doğrulaması/yetkilendirme modülünü etkinleştirdiğinizde oluşturulan uygulama kaydını seçin. (Uygulama kaydı, web uygulamanızla aynı ada sahip olmalıdır.) Kiracı kimliğini ve istemci kimliğini uygulama kaydına genel bakış sayfasında bulabilirsiniz. Etki alanı adı, kiracınızın Microsoft Entra genel bakış sayfasında bulunabilir.

Graph , Microsoft Graph uç noktasını ve uygulamanın gerektirdiği ilk kapsamları belirtir.

{
  "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

Aşağıdaki örnek, Microsoft Graph'ı oturum açmış kullanıcı olarak çağırmayı ve bazı kullanıcı bilgilerini almayı gösterir. GraphServiceClient Nesnesi denetleyiciye eklenir ve kimlik doğrulaması Microsoft.Identity.Web kitaplığı tarafından sizin için yapılandırılmıştır.

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

Kaynakları temizleme

Bu öğreticiyi tamamladıysanız ve artık web uygulamasına veya ilişkili kaynaklara ihtiyacınız yoksa, oluşturduğunuz kaynakları temizleyin.

Sonraki adımlar