Azure Uygulaması Hizmeti kimlik doğrulamasında OAuth belirteçleriyle çalışma

Bu makalede, App Service'te yerleşik kimlik doğrulaması ve yetkilendirmeyi kullanırken OAuth belirteçleriyle nasıl çalışabileceğiniz gösterilmektedir.

Uygulama kodunda belirteçleri alma

Sunucu kodunuzdan, sağlayıcıya özgü belirteçler istek üst bilgisine eklenir, böylece bunlara kolayca erişebilirsiniz. Aşağıdaki tabloda olası belirteç üst bilgisi adları gösterilmektedir:

Provider Üst bilgi adları
Microsoft Entra Kimliği X-MS-TOKEN-AAD-ID-TOKEN
X-MS-TOKEN-AAD-ACCESS-TOKEN
X-MS-TOKEN-AAD-EXPIRES-ON
X-MS-TOKEN-AAD-REFRESH-TOKEN
Facebook Belirteci X-MS-TOKEN-FACEBOOK-ACCESS-TOKEN
X-MS-TOKEN-FACEBOOK-EXPIRES-ON
Google X-MS-TOKEN-GOOGLE-ID-TOKEN
X-MS-TOKEN-GOOGLE-ACCESS-TOKEN
X-MS-TOKEN-GOOGLE-EXPIRES-ON
X-MS-TOKEN-GOOGLE-REFRESH-TOKEN
Twitter X-MS-TOKEN-TWITTER-ACCESS-TOKEN
X-MS-TOKEN-TWITTER-ACCESS-TOKEN-SECRET

Dekont

Farklı dil çerçeveleri bu üst bilgileri uygulama koduna küçük harf veya başlık büyük/küçük harf gibi farklı biçimlerde sunabilir.

İstemci kodunuzdan (mobil uygulama veya tarayıcı içi JavaScript gibi) adresine bir HTTP GET isteği gönderin (belirteç deposu etkinleştirilmelidir)./.auth/me Döndürülen JSON, sağlayıcıya özgü belirteçlere sahiptir.

Dekont

Erişim belirteçleri sağlayıcı kaynaklarına erişmeye yöneliktir, bu nedenle yalnızca sağlayıcınızı bir istemci gizli anahtarıyla yapılandırdığınızda bulunur. Yenileme belirteçlerinin nasıl alındiğini görmek için bkz. Erişim belirteçlerini yenileme.

Kimlik doğrulama belirteçlerini yenileme

Sağlayıcınızın erişim belirtecinin (oturum belirtecinin değil) süresi dolduğunda, bu belirteci yeniden kullanmadan önce kullanıcının kimliğini yeniden doğrulamanız gerekir. Uygulamanızın uç noktasına çağrı GET yaparak belirteç süresinin dolmasını /.auth/refresh önleyebilirsiniz. Çağrıldığında App Service, kimliği doğrulanmış kullanıcının belirteç deposundaki erişim belirteçlerini otomatik olarak yeniler. Uygulama kodunuz tarafından yapılan sonraki belirteç istekleri, yenilenen belirteçleri alır. Ancak belirteç yenilemenin çalışması için belirteç deposunun sağlayıcınız için yenileme belirteçleri içermesi gerekir. Yenileme belirteçlerini alma yolu her sağlayıcı tarafından belgelenir, ancak aşağıdaki liste kısa bir özettir:

  • Google: API çağrınıza /.auth/login/google bir access_type=offline sorgu dizesi parametresi ekleyin. Daha fazla bilgi için bkz . Google Yenileme Belirteçleri.

  • Facebook: Yenileme belirteçleri sağlamaz. Uzun süreli belirteçlerin süresi 60 gün içinde dolar (bkz . Facebook Süre Sonu ve Erişim Belirteçlerinin Uzantısı).

  • Twitter: Erişim belirteçlerinin süresi dolmaz (bkz . Twitter OAuth SSS).

  • Microsoft: içinde https://resources.azure.comaşağıdaki adımları uygulayın:

    1. Sayfanın üst kısmında Okuma/Yazma'yı seçin.

    2. Sol tarayıcıda resourceGroups>><<resource_group_name sağlayıcıları>Microsoft.Web>siteleri><app_name>>>>config>authsettingsV2 subscription_name>>aboneliklere gidin.

    3. Düzenle'yi tıklatın.

    4. Aşağıdaki özelliği değiştirin.

      "identityProviders": {
        "azureActiveDirectory": {
          "login": {
            "loginParameters": ["scope=openid profile email offline_access"]
          }
        }
      }
      
    5. Koy'a tıklayın.

    Dekont

    Size yenileme belirteci veren kapsam offline_access. Öğretici: Azure Uygulaması Hizmeti'nde uçtan uca kullanıcıların kimliğini doğrulama ve yetkilendirme bölümünde nasıl kullanıldığını öğrenin. Diğer kapsamlar app service tarafından varsayılan olarak zaten istenir. Bu varsayılan kapsamlar hakkında bilgi için bkz. OpenID Bağlan Kapsamları.

Sağlayıcınız yapılandırıldıktan sonra, belirteç deposunda yenileme belirtecini ve erişim belirtecinin son kullanma süresini bulabilirsiniz.

Erişim belirtecinizi istediğiniz zaman yenilemek için herhangi bir dilde arama /.auth/refresh yapın. Aşağıdaki kod parçacığı, bir JavaScript istemcisinden erişim belirteçlerinizi yenilemek için jQuery kullanır.

function refreshTokens() {
  let refreshUrl = "/.auth/refresh";
  $.ajax(refreshUrl) .done(function() {
    console.log("Token refresh completed successfully.");
  }) .fail(function() {
    console.log("Token refresh failed. See application logs for details.");
  });
}

Bir kullanıcı uygulamanıza verilen izinleri iptal ederse, çağrısı /.auth/me yanıtla 403 Forbidden başarısız olabilir. Hataları tanılamak için, ayrıntılar için uygulama günlüklerinizi denetleyin.

Oturum belirteci süre sonu yetkisiz kullanım süresini uzatma

Kimliği doğrulanmış oturumun süresi 8 saat sonra dolar. Kimliği doğrulanmış oturumun süresi dolduktan sonra varsayılan olarak 72 saatlik yetkisiz kullanım süresi vardır. Bu yetkisiz kullanım süresi içinde, kullanıcının kimliğini yeniden doğrulamadan App Service ile oturum belirtecini yenilemenize izin verilir. Yalnızca oturum belirteciniz geçersiz olduğunda arayabilirsiniz /.auth/refresh ve belirtecin süre sonunu kendiniz izlemeniz gerekmez. 72 saatlik yetkisiz kullanım süresi aşıldıktan sonra kullanıcının geçerli bir oturum belirteci almak için yeniden oturum açması gerekir.

72 saat sizin için yeterli zaman değilse, bu süre sonu penceresini genişletebilirsiniz. Süre sonunun uzun bir süre boyunca uzatılması, güvenlik açısından önemli etkilere neden olabilir (örneğin, kimlik doğrulama belirteci sızdırıldığında veya çalındığında). Bu nedenle, varsayılan 72 saat içinde bırakmanız veya uzantı süresini en küçük değere ayarlamanız gerekir.

Varsayılan süre sonu penceresini genişletmek için Cloud Shell'de aşağıdaki komutu çalıştırın.

az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>

Dekont

Yetkisiz kullanım süresi yalnızca App Service kimliği doğrulanmış oturumu için geçerlidir, kimlik sağlayıcılarının belirteçleri için geçerli değildir. Süresi dolan sağlayıcı belirteçleri için yetkisiz kullanım süresi yoktur.

Sonraki adımlar