Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как настроить Службу приложений Azure или Функции Azure для использования входа с помощью Apple в качестве поставщика проверки подлинности.
Чтобы выполнить процедуру в этой статье, необходимо зарегистрировать в программе разработчика Apple. Чтобы зарегистрироваться в программе Apple Developer, перейдите по адресу developer.apple.com/programs/enroll.
Внимание
Включение входа с помощью Apple отключает управление функцией проверки подлинности и авторизации службы приложений для приложения с помощью некоторых клиентов, таких как портал Azure, Azure CLI и Azure PowerShell. Эта функция использует новую область API, которая во время предварительной версии еще не учитывается во всех интерфейсах управления.
Создание приложения на портале разработчика Apple
Создайте идентификатор приложения и идентификатор службы на портале разработчика Apple.
На портале Apple Developer выберите Certificates, Identifiers, & Profiles (Сертификаты, идентификаторы и профили).
На вкладке Identifiers (Идентификаторы) нажмите кнопку (+).
На странице Register a New Identifier (Регистрация нового идентификатора) выберите App IDs (Идентификаторы приложений) и нажмите кнопку Continue (Продолжить). Идентификаторы приложений включают один или несколько идентификаторов служб.
На странице "Регистрация идентификатора приложения" укажите описание и идентификатор пакета.
В списке возможностей выберите "Войти" с помощью Apple И нажмите кнопку "Продолжить". Запишите префикс идентификатора приложения (идентификатор группы) на этом шаге. Он понадобится вам позже.
Проверьте сведения о регистрации приложения и нажмите кнопку Register (Зарегистрировать).
На вкладке Identifiers (Идентификаторы) еще раз нажмите кнопку (+).
На странице Register a New Identifier (Регистрация нового идентификатора) выберите Services IDs (Идентификаторы служб) и нажмите кнопку Continue (Продолжить).
На странице Register a Services ID (Регистрация идентификатора службы) укажите описание и идентификатор. Затем выберите Настроить.
Описание — это то, что пользователь видит на экране согласия. Идентификатор - это ваш клиентский ID, используемый при настройке поставщика Apple для вашей службы приложений.
В диалоговом окне задайте идентификатор основного приложения в идентификатор приложения, созданный ранее. Укажите домен приложения в разделе "Domain" (Домен). В качестве URL-адреса возврата укажите URL-адрес
<app-url>/.auth/login/apple/callback. Например,https://contoso.azurewebsites.net/.auth/login/apple/callback. Затем выберите Add (Добавить) и Save (Сохранить).
Просмотрите сведения о регистрации службы и нажмите кнопку "Сохранить".
Создание секрета клиента
Apple требует от разработчиков приложений создавать и подписывать веб-токен JSON (JWT) в качестве значения секрета клиента. Чтобы создать этот секрет, сначала создайте и скачайте закрытый ключ на основе эллиптических кривых на портале Apple Developer. Затем используйте этот ключ, чтобы подписать JWT с помощью конкретной полезной нагрузки.
Создание и скачивание закрытого ключа
- На вкладке Keys (Ключи) на портале Apple Developer выберите Create a key (Создать ключ) или нажмите кнопку (+).
- На странице "Регистрация нового ключа " укажите имя ключа, выберите "Войти с помощью Apple" и нажмите кнопку "Настроить".
- На странице Configure Key (Настройка ключа) свяжите ключ с основным идентификатором приложения, созданным ранее, и выберите Save (Сохранить).
- Завершите создание ключа, подтвердите сведения и нажмите кнопку "Продолжить". Затем просмотрите сведения и выберите "Зарегистрировать".
- На странице Download Your Key (скачивание ключа) скачайте ключ. Он загружается как файл
.p8PKCS#8. Содержимое файла используется для подписывания секрета клиента JWT.
Структурирование JWT ключа клиента
Apple требует, чтобы секрет клиента был кодировкой base64 JWT. Декодированный JWT должен иметь нагрузку, структурированную примерно следующим образом:
{
"alg": "ES256",
"kid": "URKEYID001",
}.{
"sub": "com.yourcompany.app1",
"nbf": 1560203207,
"exp": 1560289607,
"iss": "ABC123DEFG",
"aud": "https://appleid.apple.com"
}.[Signature]
- sub: Идентификатор клиента Apple, а также идентификатор службы
- iss: ваш идентификатор команды Apple Developer;
- aud: Компании Apple передается токен, следовательно, она является аудиторией.
- exp: не более шести месяцев после nbf.
Версия полезных данных в кодировке Base64 выглядит следующим образом:
eyJhbGciOiJFUzI1NiIsImtpZCI6IlVSS0VZSUQwMDEifQ.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDIwMzIwNywiZXhwIjoxNTYwMjg5NjA3LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.ABSXELWuTbgqfrIUz7bLi6nXvkXAz5O8vt0jB2dSHTQTib1x1DSP4__4UrlKI-pdzNg1sgeocolPNTmDKazO8-BHAZCsdeeTNlgFEzBytIpMKFfVEQbEtGRkam5IeclUK7S9oOva4EK4jV4VmgDrr-LGWWO3TaAxAvy3_ZoKohvFFkVG
Примечание.
Apple не принимает JWT, у которых секретный ключ с сроком действия более шести месяцев после создания или даты nbf. Необходимо сменить секрет клиента, как минимум, каждые шесть месяцев.
Дополнительные сведения о создании и проверке маркеров см. в документации разработчика Apple.
Подпишите секрет JWT клиента
Файл .p8, скачанный ранее, используется для подписания JWT-секрета клиента. Этот файл представляет собой PKCS#8-файл , содержащий закрытый ключ подписи в формате PEM. Существует множество библиотек, которые могут создавать и подписывать JWT.
Существуют различные типы библиотек с открытым исходным кодом, доступные в Интернете для создания и подписывания JWTs. Дополнительные сведения о создании JWT см. в статье JSON Web Token (JWT).
Например, одним из способов создания секрета клиента является импорт пакета NuGet Microsoft.IdentityModel.Token и запуск кода C#, показанного здесь:
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.
- clientId: Идентификатор клиента Apple, а также идентификатор службы
-
p8key: ключ формата PEM. Ключ можно получить, открыв
.p8файл в текстовом редакторе и скопировав все между-----BEGIN PRIVATE KEY-----и-----END PRIVATE KEY-----без разрывов строк. - keyId: идентификатор скачанного ключа.
Этот токен является значением секрета клиента, которое используется для конфигурации поставщика Apple.
Внимание
Секрет клиента — это важные учетные данные безопасности. Не делитесь этим секретом с кем-либо или не распространяйте его в клиентском приложении.
Добавьте секрет клиента в качестве параметра приложения, используя произвольное имя параметра. Запишите это имя для последующего использования.
Добавление сведений о поставщике в приложение
Примечание.
Требуемая конфигурация находится в новом формате API, и в настоящее время она поддерживается только конфигурацией на основе файлов (предварительная версия). Чтобы использовать такой файл, выполните указанные здесь действия.
В этом разделе описывается обновление конфигурации для включения вашего нового поставщика удостоверений (IDP). Пример конфигурации см. ниже.
identityProvidersВ объекте добавьтеappleобъект, если он еще не существует.Назначьте объект этому ключу, поместив в него объект
registrationи при необходимости объектlogin:"apple" : { "registration" : { "clientId": "<client ID>", "clientSecretSettingName": "APP_SETTING_CONTAINING_APPLE_CLIENT_SECRET" }, "login": { "scopes": [] } }В объекте
registrationзадайтеclientIdидентификатор клиента, который вы собрали.В объекте
registrationзадайтеclientSecretSettingNameимя параметра приложения, в котором хранится секрет клиента.loginВ объекте можно задатьscopesмассив для включения списка областей, используемых при проверке подлинности с помощью Apple, таких как имя и электронная почта. Если области настроены, они явно запрашиваются на экране согласия при первом входе пользователей.
После настройки этой конфигурации вы будете готовы использовать провайдер Apple, который вы настроили, в качестве аутентификации в приложении.
Полная конфигурация может выглядеть следующим образом, где параметр APPLE_GENERATED_CLIENT_SECRET указывает на параметр приложения, содержащий созданный JWT:
{
"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
}
}
}