Azure AD B2C ile Azure API Management API'lerinin güvenliğini sağlama

Azure API Management API'nize erişimi Azure Active Directory B2C (Azure AD B2C) ile kimlik doğrulaması yapılmış istemcilerle kısıtlamayı öğrenin. Azure API Management'ta erişimi yalnızca geçerli bir Azure AD B2C tarafından verilen erişim belirteci içeren isteklerle kısıtlayan bir gelen ilkesi oluşturmak ve test etmek için bu makaledeki yönergeleri izleyin.

Önkoşullar

Başlamadan önce aşağıdaki kaynaklara sahip olduğunuzdan emin olun:

Azure AD B2C uygulama kimliğini alma

Azure AD B2C ile Azure API Management'ta bir API'nin güvenliğini sağlarken, Azure API Management'ta oluşturduğunuz gelen ilkesi için çeşitli değerlere ihtiyacınız vardır. İlk olarak, Azure AD B2C kiracınızda daha önce oluşturduğunuz bir uygulamanın uygulama kimliğini kaydedin. Önkoşulları karşılamak için oluşturduğunuz uygulamayı kullanıyorsanız webapp1 için uygulama kimliğini kullanın.

Azure AD B2C kiracınıza bir uygulama kaydetmek için yeni, birleşik Uygulama kayıtları deneyimimizi veya eski Uygulamalar deneyimimizi kullanabilirsiniz. Yeni kayıt deneyimi hakkında daha fazla bilgi edinin.

  1. Azure Portal oturum açın.
  2. Birden çok kiracıya erişiminiz varsa, Dizinler + abonelikler menüsünden Azure AD B2C kiracınıza geçmek için üstteki menüden Ayarlar simgesini seçin.
  3. Sol bölmede Azure AD B2C'yi seçin. Alternatif olarak, Tüm hizmetler'i ve ardından Azure AD B2C'yi arayıp seçebilirsiniz.
  4. Uygulama kayıtları'ı ve ardından Sahip olunan uygulamalar sekmesini seçin.
  5. Değeri webapp1 veya daha önce oluşturduğunuz başka bir uygulama için Uygulama (istemci) kimliği sütununa kaydedin.

Belirteç veren uç noktası alma

Ardından, Azure AD B2C kullanıcı akışlarınızdan biri için iyi bilinen yapılandırma URL'sini alın. Ayrıca, Azure API Management'ta desteklemek istediğiniz belirteç veren uç nokta URI'sine de ihtiyacınız vardır.

  1. Azure portalında Azure AD B2C kiracınıza gidin.

  2. İlkeler'in altında Kullanıcı akışları'yı seçin.

  3. Var olan bir ilkeyi (örneğin, B2C_1_signupsignin1) ve ardından Kullanıcı akışını çalıştır'ı seçin.

  4. URL'yi sayfanın üst kısmındaki Kullanıcı akışını çalıştır başlığı altında görüntülenen köprüye kaydedin. Bu URL, kullanıcı akışı için openID Bağlan iyi bilinen bulma uç noktasıdır ve azure API Management'ta gelen ilkesini yapılandırırken bunu sonraki bölümde kullanacaksınız.

    Screenshot of the well-known URI hyperlink on the

  5. OpenID Bağlan iyi bilinen yapılandırma sayfasına gitmek için köprüyü seçin.

  6. Tarayıcınızda açılan sayfada değeri kaydedin issuer . Örnek:

    https://<tenant-name>.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

    Azure API Management'ta API'nizi yapılandırırken sonraki bölümde bu değeri kullanacaksınız.

Bir sonraki bölümde kullanılmak üzere kaydedilmiş iki URL'niz olmalıdır: OpenID Bağlan iyi bilinen yapılandırma uç noktası URL'si ve veren URI'si. Örnek:

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration
https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/

Azure API Management'ta gelen ilkesini yapılandırma

Artık Azure API Management'ta API çağrılarını doğrulayan gelen ilkesini eklemeye hazırsınız. Erişim belirtecinde hedef kitleyi ve vereni doğrulayan bir JSON web belirteci (JWT) doğrulama ilkesi ekleyerek yalnızca geçerli belirteci olan API çağrılarının kabul edilmesini sağlayabilirsiniz.

  1. Azure portalında Azure API Management örneğine gidin.

  2. API’ler seçeneğini belirleyin.

  3. Azure AD B2C ile güvenliğini sağlamak istediğiniz API'yi seçin.

  4. Tasarım sekmesini seçin.

  5. Gelen işleme'nin altında/> öğesini seçerek <ilke kodu düzenleyicisini açın.

  6. İlkenin içine <inbound> aşağıdaki <validate-jwt> etiketi yerleştirin ve aşağıdakileri yapın:

    a. url öğesindeki <openid-config> değeri ilkenizin iyi bilinen yapılandırma URL'si ile güncelleştirin.
    b. <audience> öğesini daha önce B2C kiracınızda oluşturduğunuz uygulamanın uygulama kimliğiyle güncelleştirin (örneğin, webapp1).
    c. <issuer> öğesini daha önce kaydettiğiniz belirteç veren uç noktasıyla güncelleştirin.

    <policies>
        <inbound>
            <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
                <openid-config url="https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
                <audiences>
                    <audience>44444444-0000-0000-0000-444444444444</audience>
                </audiences>
                <issuers>
                    <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
                </issuers>
            </validate-jwt>
            <base />
        </inbound>
        <backend> <base /> </backend>
        <outbound> <base /> </outbound>
        <on-error> <base /> </on-error>
    </policies>
    

Güvenli API erişimini doğrulama

API'nize yalnızca kimliği doğrulanmış arayanların erişebildiğinden emin olmak için Api'yi Postman ile çağırarak Azure API Management yapılandırmanızı doğrulayabilirsiniz.

API'yi çağırmak için hem Azure AD B2C tarafından verilen erişim belirtecine hem de Azure API Management abonelik anahtarına ihtiyacınız vardır.

Bir erişim belirteci alma

Öncelikle Postman'deki üst bilgide kullanmak için Azure AD B2C tarafından verilen bir belirteci Authorization kullanmanız gerekir. Önkoşullardan biri olarak oluşturduğunuz kaydolma/oturum açma kullanıcı akışının Şimdi çalıştır özelliğini kullanarak bir tane alabilirsiniz.

  1. Azure portalında Azure AD B2C kiracınıza gidin.

  2. İlkeler'in altında Kullanıcı akışları'yı seçin.

  3. Var olan bir kaydolma/oturum açma kullanıcı akışını seçin (örneğin, B2C_1_signupsignin1).

  4. Uygulama için webapp1'i seçin.

  5. Yanıt URL'si için öğesini seçinhttps://jwt.ms.

  6. Kullanıcı akışı çalıştır'ı seçin.

    Screenshot of the

  7. Oturum açma işlemini tamamlayın. adresine yönlendirilmelisiniz https://jwt.ms.

  8. Tarayıcınızda görüntülenen kodlanmış belirteç değerini kaydedin. Postman'deki Yetkilendirme üst bilgisi için bu belirteç değerini kullanırsınız.

    Screenshot of the encoded token value displayed on jwt.ms.

API abonelik anahtarı alma

Yayımlanan API'yi çağıran bir istemci uygulaması (bu örnekte Postman), API'ye yönelik HTTP isteklerine geçerli bir API Management abonelik anahtarı içermelidir. Postman HTTP isteğinize eklenecek bir abonelik anahtarı almak için:

  1. Azure portalında Azure API Management hizmet örneğine gidin.
  2. Abonelikler'i seçin.
  3. Ürün: Sınırsız'ın yanındaki üç noktayı (...) ve ardından Anahtarları göster/gizle'yi seçin.
  4. Ürün için Birincil Anahtarı kaydedin. Postman'deki HTTP isteğinizdeki üst bilgi için Ocp-Apim-Subscription-Key bu anahtarı kullanırsınız.

Screenshot of the

Güvenli API çağrısını test edin

Erişim belirteci ve Azure API Management abonelik anahtarı kaydedildiyse artık API'ye güvenli erişimi doğru yapılandırıp yapılandırmadığınızı test etmeye hazırsınız.

  1. Postman'de yeni GET bir istek oluşturun. İstek URL'si için, önkoşullardan biri olarak yayımladığınız API'nin konuşmacılar listesi uç noktasını belirtin. Örnek:

    https://contosoapim.azure-api.net/conference/speakers

  2. Ardından aşağıdaki üst bilgileri ekleyin:

    Anahtar Değer
    Authorization Daha önce ön ekli Bearer olarak kaydettiğiniz kodlanmış belirteç değeri ("Taşıyıcı" ifadesinin arkasına boşluk ekleyin)
    Ocp-Apim-Subscription-Key Daha önce kaydettiğiniz Azure API Management abonelik anahtarı.

    GET isteği URL'niz ve Üst Bilgileriniz aşağıdaki görüntüde gösterilenlere benzer şekilde görünmelidir:

    Screenshot of the Postman UI showing the GET request URL and headers.

  3. Postman'de, isteği yürütmek için Gönder düğmesini seçin. Her şeyi doğru yapılandırdıysanız, konferans konuşmacıları koleksiyonuyla birlikte bir JSON yanıtı verilmelidir (burada gösterilmiştir, kesilmiş):

    {
      "collection": {
        "version": "1.0",
        "href": "https://conferenceapi.azurewebsites.net:443/speakers",
        "links": [],
        "items": [
          {
            "href": "https://conferenceapi.azurewebsites.net/speaker/1",
            "data": [
              {
                "name": "Name",
                "value": "Scott Guthrie"
              }
            ],
            "links": [
              {
                "rel": "http://tavis.net/rels/sessions",
                "href": "https://conferenceapi.azurewebsites.net/speaker/1/sessions"
              }
            ]
          },
    [...]
    

Güvenli olmayan API çağrısını test edin

Başarılı bir istekte bulunduktan sonra api'nize yapılan çağrıların beklendiği gibi reddedildiğinden emin olmak için hata durumunu test edin. Testi gerçekleştirmenin bir yolu, belirteç değerine birkaç karakter eklemek veya değiştirmek ve ardından öncekiyle aynı GET isteği çalıştırmaktır.

  1. Geçersiz bir belirtecin benzetimini yapmak için belirteç değerine birkaç karakter ekleyin. Örneğin, burada gösterildiği gibi belirteç değerine "INVALID" ekleyebilirsiniz:

    Screenshot of the Headers section of Postman UI showing the string INVALID added to token.

  2. İsteği yürütmek için Gönder düğmesini seçin. Geçersiz bir belirteçle beklenen sonuç yetkisiz durum 401 kodudur:

    {
        "statusCode": 401,
        "message": "Unauthorized. Access token is missing or invalid."
    }
    

Durum 401 kodu görüyorsanız yalnızca Azure AD B2C tarafından verilen geçerli erişim belirtecine sahip çağıranların Azure API Management API'nize başarılı isteklerde bulunabileceğini doğruladınız.

Birden çok uygulamayı ve vereni destekleme

Birkaç uygulama genellikle tek bir REST API ile etkileşim kurar. API'nizin birden çok uygulamaya yönelik belirteçleri kabul edebilmesi için uygulama kimliklerini <audiences> Azure API Management gelen ilkesindeki öğesine ekleyin.

<!-- Accept tokens intended for these recipient applications -->
<audiences>
    <audience>44444444-0000-0000-0000-444444444444</audience>
    <audience>66666666-0000-0000-0000-666666666666</audience>
</audiences>

Benzer şekilde, birden çok belirteç vereni desteklemek için <issuers> uç nokta URI'lerini Azure API Management gelen ilkesindeki öğesine ekleyin.

<!-- Accept tokens from multiple issuers -->
<issuers>
    <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
    <issuer>https://login.microsoftonline.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
</issuers>

b2clogin.com geçiş

Eski login.microsoftonline.com uç nokta tarafından verilen belirteçleri doğrulayan bir Azure API ManagementM API'niz varsa API'yi ve onu çağıran uygulamaları b2clogin.com tarafından verilen belirteçleri kullanacak şekilde geçirmeniz gerekir.

Aşamalı geçiş gerçekleştirmek için bu genel işlemi izleyebilirsiniz:

  1. Hem b2clogin.com hem de login.microsoftonline.com tarafından verilen belirteçler için Azure API Management gelen ilkenize destek ekleyin.
  2. b2clogin.com uç noktasından belirteçleri almak için uygulamalarınızı birer birer güncelleştirin.
  3. Tüm uygulamalarınız b2clogin.com doğru belirteçleri aldıktan sonra API'den login.microsoftonline.com tarafından verilen belirteçler desteğini kaldırın.

Aşağıdaki örnek Azure API Management gelen ilkesi, hem b2clogin.com hem de login.microsoftonline.com tarafından verilen belirteçlerin nasıl kabul edildiği gösterilmektedir. Ayrıca, ilke iki uygulamadan API isteklerini destekler.

<policies>
    <inbound>
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
            <openid-config url="https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
            <audiences>
                <audience>44444444-0000-0000-0000-444444444444</audience>
                <audience>66666666-0000-0000-0000-666666666666</audience>
            </audiences>
            <issuers>
                <issuer>https://login.microsoftonline.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
                <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
            </issuers>
        </validate-jwt>
        <base />
    </inbound>
    <backend> <base /> </backend>
    <outbound> <base /> </outbound>
    <on-error> <base /> </on-error>
</policies>

Sonraki adımlar

Azure API Management ilkeleri hakkında ek bilgi için bkz . Azure API Management ilke başvuru dizini.

OWIN tabanlı web API'lerini ve uygulamalarını b2clogin.com geçirme hakkında bilgi için bkz . OWIN tabanlı web API'sini b2clogin.com geçirme.