Öğretici: Kullanıcı olarak güvenli bir JavaScript uygulamasından 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.

Ön koş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.)

  1. Microsoft Entra yönetim merkezinde Uygulamalar'ı seçin.

  2. 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.

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

  4. 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.

  1. Azure kaynaklarınızın düzenlenmesini etkinleştirmek için sayfanın üst kısmında Okuma/Yazma'yı seçin.

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

  3. authsettingsV2 görünümünde Düzenle'yi seçin.

  4. 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"
            ]
          }
        }
      }
    },
    
  5. 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.

Node.js'den Microsoft Graph'ı çağırma

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

Bu kodu örnek bir uygulamanın parçası olarak görmek için aşağıdakilere bakın:

İstemci kitaplığı paketlerini yükleme

npm ile projenize @azure/identity ve @microsoft/microsoft-graph-client paketlerini yükleyin.

npm install @microsoft/microsoft-graph-client

Kimlik doğrulama bilgilerini yapılandırma

Kimlik doğrulama ayarlarını tutmak için bir nesne oluşturun:

// partial code in app.js
const appSettings = {
    appCredentials: {
        clientId: process.env.WEBSITE_AUTH_CLIENT_ID, // Enter the client Id here,
        tenantId: "common", // Enter the tenant info here,
        clientSecret: process.env.MICROSOFT_PROVIDER_AUTHENTICATION_SECRET // Enter the client secret here,
    },
    authRoutes: {
        redirect: "/.auth/login/aad/callback", // Enter the redirect URI here
        error: "/error", // enter the relative path to error handling route
        unauthorized: "/unauthorized" // enter the relative path to unauthorized route
    },
    protectedResources: {
        graphAPI: {
            endpoint: "https://graph.microsoft.com/v1.0/me", // resource endpoint
            scopes: ["User.Read"] // resource scopes
        },
    },
}

Kullanıcı adına Microsoft Graph'ı arayın

Aşağıdaki kod, Microsoft Graph denetleyicisini uygulama olarak çağırmayı ve bazı kullanıcı bilgilerini almayı gösterir.

// controllers/graphController.js

// get the name of the app service instance from environment variables
const appServiceName = process.env.WEBSITE_SITE_NAME;

const graphHelper = require('../utils/graphHelper');

exports.getProfilePage = async(req, res, next) => {

    try {
        // get user's access token scoped to Microsoft Graph from session
        // use token to create Graph client
        const graphClient = graphHelper.getAuthenticatedClient(req.session.protectedResources["graphAPI"].accessToken);

        // return user's profile
        const profile = await graphClient
            .api('/me')
            .get();

        res.render('profile', { isAuthenticated: req.session.isAuthenticated, profile: profile, appServiceName: appServiceName });   
    } catch (error) {
        next(error);
    }
}

Önceki kod, Microsoft Graph istemcisini döndürmek için aşağıdaki getAuthenticatedClient işlevine dayanır.

// utils/graphHelper.js

const graph = require('@microsoft/microsoft-graph-client');

getAuthenticatedClient = (accessToken) => {
    // Initialize Graph client
    const client = graph.Client.init({
        // Use the provided access token to authenticate requests
        authProvider: (done) => {
            done(null, accessToken);
        }
    });

    return client;
}

Kaynakları temizleme

Bu çok bölümlü öğreticideki tüm adımları tamamladıysanız, bir kaynak grubunda bir app service, app service barındırma planı ve bir depolama hesabı oluşturdunuz. Ayrıca Microsoft Entra Id'de bir uygulama kaydı oluşturdunuz. Artık gerekli olmadığında, ücret tahakkuk etmeye devam etmemesi için bu kaynakları ve uygulama kaydını silin.

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

  • Öğreticiyi takip ederken oluşturulan Azure kaynaklarını silin.

Kaynak grubunu silme

Azure portalında portal menüsünden Kaynak grupları'nı ve ardından app service ve app service planınızı içeren kaynak grubunu seçin.

Kaynak grubunu ve tüm kaynakları silmek için Kaynak grubunu sil'i seçin.

Screenshot that shows deleting the resource group.

Bu komutun çalıştırılması birkaç dakika sürebilir.

Uygulama kaydını silme

Microsoft Entra yönetim merkezinde Uygulamalar> Uygulama kayıtları'ı seçin. Ardından oluşturduğunuz uygulamayı seçin. Screenshot that shows selecting app registration.

Uygulama kaydına genel bakış bölümünde Sil'i seçin. Screenshot that shows deleting the app registration.

Sonraki adımlar

Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:

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