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.
- Apple Geliştirici portalında Sertifikalar, Tanımlayıcılar ve Profiller'e gidin.
- Tanımlayıcılar sekmesinde (+) düğmesini seçin.
- 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.)
- 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.
- Uygulama kayıt bilgilerini gözden geçirin ve Kaydet'i seçin.
- Yine Tanımlayıcılar sekmesinde (+) düğmesini seçin.
- Yeni Tanımlayıcı Kaydet sayfasında Hizmet Kimlikleri'ni seçin ve Devam'ı seçin.
- 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.
- 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/callback
kullanın. Örneğin,https://contoso.azurewebsites.net/.auth/login/apple/callback
. Ardından Ekle ve Kaydet'i seçin. - 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
- Apple Geliştirici portalındaki Anahtarlar sekmesinde Anahtar oluştur'u seçin veya (+) düğmesini seçin.
- 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.
- Anahtarı Yapılandır sayfasında, anahtarı daha önce oluşturduğunuz birincil uygulama kimliğine bağlayın ve Kaydet'i seçin.
- Bilgileri onaylayıp Devam'ı seçip bilgileri gözden geçirip Kaydet'i seçerek anahtarı oluşturmayı tamamlayın.
- 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
Not
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.
nesnenin içinde
identityProviders
, henüz yoksa birapple
nesne ekleyin.Bir nesneyi içinde bir nesne ve isteğe bağlı olarak bir
registration
nesne ile bu anahtara atayınlogin
:"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ınclientId
.b. nesnesi içinde
registration
, istemci gizli dizisini depoladığınız uygulama ayarının adına ayarlayınclientSecretSettingName
.c. nesnesinin
login
içinde, diziyiscopes
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
}
}
}