App Service veya Azure İşlevleri uygulamanızı Apple sağlayıcısıyla oturum açma (Önizleme) kullanarak oturum açmak için yapılandırma

Bu makalede, Azure Uygulaması Hizmeti'ni veya Azure İşlevleri Apple ile kimlik doğrulama sağlayıcısı olarak oturum açma özelliğini kullanacak şekilde nasıl yapılandırabileceğiniz gösterilmektedir.

Bu makaledeki yordamı tamamlamak için Apple geliştirici programına kayıtlı olmanız gerekir. Apple geliştirici programına kaydolmak için developer.apple.com/programs/enroll gidin.

Dikkat

Apple ile oturum açma özelliğinin etkinleştirilmesi, Azure portalı, Azure CLI ve Azure PowerShell gibi bazı istemciler aracılığıyla uygulamanız için App Service Kimlik Doğrulaması / Yetkilendirme özelliğinin yönetimini devre dışı bırakır. Bu özellik, önizleme sırasında henüz tüm yönetim deneyimlerinde hesaba eklenmemiş yeni bir API yüzeyine dayanır.

Apple Geliştirici portalında uygulama oluşturma

Apple Geliştirici portalında uygulama kimliği ve hizmet kimliği oluşturmanız gerekir.

  1. Apple Geliştirici portalında Sertifikalar, Tanımlayıcılar ve Profiller'e gidin.
  2. Tanımlayıcılar sekmesinde (+) düğmesini seçin.
  3. Yeni Tanımlayıcı Kaydet sayfasında Uygulama Kimlikleri'ni seçin ve Devam'ı seçin. (Uygulama kimlikleri bir veya daha fazla Hizmet Kimliği içerir.) Registering a new app identifier in the Apple Developer Portal
  4. Uygulama Kimliğini Kaydet sayfasında bir açıklama ve paket kimliği sağlayın ve özellikler listesinden Apple ile oturum aç'ı seçin. Daha sonra Devam seçeneğini belirleyin. Bu adımdan Uygulama Kimliği Ön Eki'nizi (Ekip Kimliği) not edin, daha sonra buna ihtiyacınız olacak. Configuring a new app identifier in the Apple Developer Portal
  5. Uygulama kayıt bilgilerini gözden geçirin ve Kaydet'i seçin.
  6. Yine Tanımlayıcılar sekmesinde (+) düğmesini seçin. Creating a new service identifier in the Apple Developer Portal
  7. Yeni Tanımlayıcı Kaydet sayfasında Hizmet Kimlikleri'ni seçin ve Devam'ı seçin. Registering a new service identifier in the Apple Developer Portal
  8. Hizmet Kimliğini Kaydet sayfasında bir açıklama ve tanımlayıcı girin. Açıklama, kullanıcıya onay ekranında gösterilecek olan açıklamadır. Tanımlayıcı, Apple sağlayıcısını uygulama hizmetinizle yapılandırmada kullanılan istemci kimliğiniz olacaktır. Ardından Yapılandır'ı seçin. Providing a description and an identifier
  9. Açılır pencerede, Birincil Uygulama Kimliği'ni daha önce oluşturduğunuz Uygulama Kimliği olarak ayarlayın. Etki alanı bölümünde uygulamanızın etki alanını belirtin. Dönüş URL'si için URL'sini <app-url>/.auth/login/apple/callbackkullanın. Örneğin, https://contoso.azurewebsites.net/.auth/login/apple/callback. Ardından Ekle ve Kaydet'i seçin. Specifying the domain and return URL for the registration
  10. Hizmet kayıt bilgilerini gözden geçirin ve Kaydet'i seçin.

İstemci gizli dizisini oluşturma

Apple, uygulama geliştiricilerinin istemci gizli anahtarı değeri olarak bir JWT belirteci oluşturmasını ve imzalamasını gerektirir. Bu gizli diziyi oluşturmak için önce Apple Geliştirici portalından bir üç nokta eğrisi özel anahtarı oluşturun ve indirin. Ardından, belirli bir yükle JWT imzalamak için bu anahtarı kullanın.

Özel anahtarı oluşturma ve indirme

  1. Apple Geliştirici portalındaki Anahtarlar sekmesinde Anahtaroluştur'u seçin veya (+) düğmesini seçin.
  2. Yeni Anahtar Kaydet sayfasında anahtara bir ad verin, Apple ile oturum aç'ın yanındaki kutuyu işaretleyin ve Yapılandır'ı seçin.
  3. Anahtarı Yapılandır sayfasında, anahtarı daha önce oluşturduğunuz birincil uygulama kimliğine bağlayın ve Kaydet'i seçin.
  4. Bilgileri onaylayıp Devam'ı seçip bilgileri gözden geçirip Kaydet'i seçerek anahtarı oluşturmayı tamamlayın.
  5. Anahtarınızı İndir sayfasında anahtarı indirin. Bir (PKCS#8) dosyası olarak .p8 indirilir; istemci gizli anahtarı JWT'nizi imzalamak için dosya içeriğini kullanırsınız.

İstemci gizli dizisi JWT'sini yapılandırma

Apple, istemci gizli dizisinin bir JWT belirtecinin base64 kodlaması olmasını gerektirir. Kodu çözülen JWT belirtecinin şu örnekteki gibi yapılandırılmış bir yükü olmalıdır:

{
  "alg": "ES256",
  "kid": "URKEYID001",
}.{
  "sub": "com.yourcompany.app1",
  "nbf": 1560203207,
  "exp": 1560289607,
  "iss": "ABC123DEFG",
  "aud": "https://appleid.apple.com"
}.[Signature]
  • sub: Apple İstemci Kimliği (hizmet kimliği de)
  • iss: Apple Geliştirici Ekibi Kimliğiniz
  • aud: Apple belirteci aldığından hedef kitle bunlardır
  • exp: nbf'den sonra en fazla altı ay

Yukarıdaki yükün base64 kodlu sürümü şöyle görünür: eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG

Not: Apple, oluşturma (veya nbf) tarihinden sonraki altı aydan uzun bir süre sonu olan gizli JWT'leri kabul etmez. Bu, istemci gizli dizinizi en az altı ayda bir döndürmeniz gerektiği anlamına gelir.

Belirteç oluşturma ve doğrulama hakkında daha fazla bilgi Apple'ın geliştirici belgelerinde bulunabilir.

İstemci gizli anahtarı JWT'sini imzalama

İstemci gizli anahtarı JWT'sini .p8 imzalamak için daha önce indirdiğiniz dosyayı kullanacaksınız. Bu dosya, PEM biçiminde özel imzalama anahtarını içeren bir PCKS#8 dosyasıdır . Sizin için JWT oluşturabilen ve imzalayan birçok kitaplık vardır.

JWT belirteçleri oluşturmak ve imzalamak için çevrimiçi olarak kullanılabilecek farklı türde açık kaynak kitaplıkları vardır. JWT belirteçleri oluşturma hakkında daha fazla bilgi için bkz . JSON Web Belirteci (JWT). Örneğin, istemci gizli dizisini oluşturmanın bir yolu, Microsoft.IdentityModel.Tokens NuGet paketini içeri aktarmak ve aşağıda gösterilen az miktarda C# kodu çalıştırmaktır.

using Microsoft.IdentityModel.Tokens;

public static string GetAppleClientSecret(string teamId, string clientId, string keyId, string p8key)
{
    string audience = "https://appleid.apple.com";

    string issuer = teamId;
    string subject = clientId;
    string kid = keyId;

    IList<Claim> claims = new List<Claim> {
        new Claim ("sub", subject)
    };

    CngKey cngKey = CngKey.Import(Convert.FromBase64String(p8key), CngKeyBlobFormat.Pkcs8PrivateBlob);

    SigningCredentials signingCred = new SigningCredentials(
        new ECDsaSecurityKey(new ECDsaCng(cngKey)),
        SecurityAlgorithms.EcdsaSha256
    );

    JwtSecurityToken token = new JwtSecurityToken(
        issuer,
        audience,
        claims,
        DateTime.Now,
        DateTime.Now.AddDays(180),
        signingCred
    );
    token.Header.Add("kid", kid);
    token.Header.Remove("typ");

    JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();

    return tokenHandler.WriteToken(token);
}
  • teamId: Apple Geliştirici Ekibi Kimliğiniz
  • clientId: Apple İstemci Kimliği (hizmet kimliği de)
  • p8key: PEM biçim anahtarı - dosyayı bir metin düzenleyicisinde açarak .p8 ve satır sonları arasında -----BEGIN PRIVATE KEY----- ve -----END PRIVATE KEY----- olmadan her şeyi kopyalayarak anahtarı alabilirsiniz
  • keyId: İndirilen anahtarın kimliği

Döndürülen bu belirteç, Apple sağlayıcısını yapılandırmak için kullanacağınız istemci gizli dizisi değeridir.

Önemli

İstemci gizli anahtarı önemli bir güvenlik kimlik bilgisidir. Bu gizli diziyi kimseyle paylaşmayın veya bir istemci uygulaması içinde dağıtmayın.

İstemci gizli dizisini, seçtiğiniz bir ayar adını kullanarak uygulama için bir uygulama ayarı olarak ekleyin. Bu adı daha sonra kullanmak üzere not edin.

Uygulamanıza sağlayıcı bilgileri ekleme

Dekont

Gerekli yapılandırma, şu anda yalnızca dosya tabanlı yapılandırma (önizleme) tarafından desteklenen yeni bir API biçimindedir. Böyle bir dosyayı kullanarak aşağıdaki adımları izlemeniz gerekir.

Bu bölüm, yapılandırmayı yeni IDP'nizi içerecek şekilde güncelleştirme işleminde size yol gösterir. Örnek bir yapılandırma aşağıda verilmiştir.

  1. nesnenin içinde identityProviders , henüz yoksa bir apple nesne ekleyin.

  2. Bir nesneyi içinde bir nesne ve isteğe bağlı olarak bir registration nesne ile bu anahtara atayın login :

    "apple" : {
       "registration" : {
            "clientId": "<client ID>",
            "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" 
        },
       "login": {
             "scopes": []
       }
    }
    

    a. nesnesinin içinde registration öğesini, topladığınız istemci kimliğine ayarlayın clientId .

    b. nesnesi içinde registration , istemci gizli dizisini depoladığınız uygulama ayarının adına ayarlayın clientSecretSettingName .

    c. nesnesinin login içinde, diziyi scopes Apple ile kimlik doğrulaması yaparken kullanılan kapsamların listesini içerecek şekilde (örneğin, "ad" ve "e-posta") ayarlayabilirsiniz. Kapsamlar yapılandırılırsa, kullanıcılar ilk kez oturum açtıklarında onay ekranında açıkça istenir.

Bu yapılandırma ayarlandıktan sonra, uygulamanızda kimlik doğrulaması için Apple sağlayıcınızı kullanmaya hazırsınız demektir.

Tam yapılandırma aşağıdaki örneğe benzer olabilir (burada APPLE_GENERATED_CLIENT_SECRET ayarı, oluşturulan JWT içeren bir uygulama ayarını gösterir):

{
    "platform": {
        "enabled": true
    },
    "globalValidation": {
        "redirectToProvider": "apple",
        "unauthenticatedClientAction": "RedirectToLoginPage"
    },
    "identityProviders": {
        "apple": {
            "registration": {
                "clientId": "com.contoso.example.client",
                "clientSecretSettingName": "APPLE_GENERATED_CLIENT_SECRET"
            },
            "login": {
                "scopes": []
            }
        }
    },
    "login": {
        "tokenStore": {
            "enabled": true
        }
    }     
}

Sonraki adımlar