Настройка защиты учетных записей клиентов
Защита от мошенничества Microsoft Dynamics 365 включает возможности защиты учетных записей, которые помогут вам оценить, происходят ли подозрительные действия в вашей бизнес-экосистеме. Эти возможности включают возможности оценки рисков, которые можно использовать для блокировки или вызова мошеннических попыток создания учетных записей или компрометации существующих учетных записей. Далее приводятся некоторые примеры.
- API для оценки рисков в режиме реального времени
- Интерфейс правила и списка, который можно использовать для оптимизации стратегии риска в соответствии с вашими бизнес-потребностями.
- Мониторинг панелей мониторинга, которые можно использовать для мониторинга эффективности и тенденций защиты от мошенничества в экосистеме
Защита учетных записей охватывает три типа событий жизненного цикла учетной записи: создание учетной записи, имя входа учетной записи и настраиваемую оценку. Для каждого типа события существует несколько линий защиты:
- Эффективное обнаружение бота: когда защита от мошенничества обнаруживает автоматическую попытку использовать список скомпрометированных учетных данных или принудительного подбора для создания или изменения учетных записей, первая строка защиты — это динамическое и надежное обнаружение ботов. Этот расширенный адаптивный искусственный интеллект (ИИ) быстро создает оценку, сопоставленную с вероятностью, что бот инициирует событие.
- Усиленная оценка в режиме реального времени: в качестве следующей линии обороны защита от мошенничества использует модели искусственного интеллекта для создания оценки рисков. Эту оценку можно использовать с правилами для утверждения, вызова, отклонения или проверки попыток входа и регистрации на основе бизнес-потребностей.
Цели для этого документа
В этом документе описаны следующие действия.
Шаг 3. Общие сведения о событиях защиты учетных записей
После выполнения этих действий вы сможете использовать защиту учетных записей для блокировки или вызова подозрительных попыток компрометации существующих учетных записей.
Необходимые компоненты
Перед началом действий в этом документе необходимо выполнить следующие задачи:
- Настройте защиту от мошенничества в клиенте Microsoft Entra.
- Настройка отпечатков пальцев устройства.
Шаг 1. Реализация API защиты учетных записей
Чтобы воспользоваться полным набором функций в службе защиты от мошенничества, отправьте данные транзакций в API в режиме реального времени.
- В ходе оценки можно проанализировать результаты использования защиты от мошенничества.
- В интерфейсе защиты вы можете принимать решения в соответствии с настроенными правилами.
Вы можете использовать различные API защиты учетных записей в зависимости от способа использования защиты от мошенничества. Примеры этих API: AccountCreation, AccountLogin, AccountCreationStatu s, AccountLoginStatus, AccountUpdate, Label и Custom Events.
Дополнительные сведения о поддерживаемых событиях см. в api защиты от мошенничества Dynamics 365.
Шаг 2. Создание приложений Microsoft Entra
Внимание
Чтобы выполнить этот шаг, необходимо быть администратором приложений, администратором облачных приложений или глобальным администратором в клиенте Microsoft Entra.
Чтобы получить маркеры, необходимые для вызова API, используйте защиту от мошенничества для настройки приложений Microsoft Entra.
Настройка приложения Microsoft Entra
На портале защиты от мошенничества в области навигации слева выберите "Параметры" и выберите "Управление доступом".
Выберите "Доступ к приложению". В раскрывающемся списке "+ Назначить роли приложения" выберите "Создать приложение", а затем заполните поля для создания приложения. Требуются следующие поля:
Отображаемое имя приложения— введите описательное имя приложения. Максимальная длина — 93 символа.
Метод проверки подлинности. Выберите, используется ли сертификат или секрет (защищенный паролем) для проверки подлинности.
- Выберите сертификат и выберите " Выбрать файл ", чтобы отправить открытый ключ. При получении маркеров требуется соответствующий закрытый ключ.
- Выберите секрет , чтобы автоматически создать пароль после создания приложения. Секреты не так безопасны, как сертификаты.
Выберите роли API, которые вы хотите назначить этому приложению, в раскрывающемся списке "Роли ". По умолчанию выбрана роль Risk_API. Роли API можно изменять в любое время.
- Risk_API. Приложения Entra, назначенные Risk_API ролям, могут вызывать конечные точки API для оценки мошенничества и событий наблюдения.
- Provisioning_API. Приложения Entra, назначенные Provisioning_API ролям, могут вызывать конечную точку API подготовки мошенничества, которая позволяет создавать, обновлять и удалять не корневые среды.
Внимание
Роли API можно изменять для существующего приложения Entra в любое время. Дополнительные сведения см. в статье о настройке доступа к приложению Microsoft Entra.
- Завершив заполнение полей, нажмите кнопку "Создать приложение".
Страница подтверждения суммирует имя и идентификатор приложения, а также отпечаток сертификата или секрет в зависимости от выбранного метода проверки подлинности.
Внимание
Сохраните сведения о отпечатке сертификата или секрете для дальнейшего использования. Эти сведения отображаются только один раз.
Создание дополнительных приложений
Вы можете создавать столько приложений, сколько требуется для выполнения вызовов API в рабочих средах.
- На вкладке "Доступ к приложению" выберите "Создать приложение " в раскрывающемся списке "Назначение ролей приложения" в верхней панели навигации.
- Заполните поля для создания приложения и нажмите кнопку "Создать приложение".
Вызов API защиты от мошенничества в режиме реального времени
Используйте сведения в этом разделе для интеграции систем с защитой от мошенничества.
Обязательные идентификаторы и сведения
- Конечная точка API — URI среды отображается на плитке сведений об учетной записи на панели мониторинга защиты от мошенничества.
- Идентификатор каталога (клиента) — идентификатор каталога — это глобальный уникальный идентификатор (GUID) для домена клиента в Azure. Он отображается в портал Azure и на плитке сведений об учетной записи на панели мониторинга защиты от мошенничества.
- Идентификатор приложения (клиента) — идентификатор приложения определяет приложение Microsoft Entra, созданное для вызова API. Этот идентификатор можно найти на странице подтверждения, которая отображается после нажатия кнопки "Создать приложение" на странице Управление API. Вы также можете найти его позже, в Регистрация приложений в портал Azure. Для каждого создаваемого приложения будет один идентификатор.
- Отпечаток или секрет сертификата— вы можете найти отпечаток сертификата или секрет на странице подтверждения, которая отображается после нажатия кнопки "Создать приложение" на странице Управление API.
- Идентификатор экземпляра— идентификатор экземпляра — это глобальный уникальный идентификатор (GUID) для вашей среды в службе защиты от мошенничества. Он отображается на плитке интеграции на панели мониторинга защиты от мошенничества.
Создание маркера доступа
Необходимо создать этот маркер и предоставить его каждому вызову API. Обратите внимание, что маркеры доступа имеют ограниченный срок действия. Рекомендуется кэшировать и повторно использовать каждый маркер доступа до тех пор, пока не пришло время получить новый. В следующих примерах кода C# показано, как получить маркер с помощью сертификата или секрета. Замените заполнители собственными сведениями.
Отпечаток СЕРТИФИКАТА
public async Task<string> AcquireTokenWithCertificateAsync()
{
var x509Cert = CertificateUtility.GetByThumbprint("<Certificate thumbprint>");
var clientAssertion = new ClientAssertionCertificate("<Client ID>", x509Cert);
var context = new AuthenticationContext("<Authority URL. Typically https://login.microsoftonline.com/[Directory_ID]>");
var authenticationResult = await context.AcquireTokenAsync("<API endpoint>", clientAssertion);
return authenticationResult.AccessToken;
}
Секрет
public async Task<string> AcquireTokenWithSecretAsync()
{
var clientAssertion = new ClientCredential("<Client ID>", "<Client secret>");
var context = new AuthenticationContext("<Authority URL. Typically https://login.microsoftonline.com/[Directory_ID]>");
var authenticationResult = await context.AcquireTokenAsync("<API endpoint>", clientAssertion);
return authenticationResult.AccessToken;
}
Response
За кулисами предыдущий код создает HTTP-запрос и получает ответ, похожий на следующий пример.
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: <date>
Content-Length: <content length>
{
"token_type":"Bearer",
"expires_in":"3599",
"ext_expires_in":"3599",
"expires_on":"<date timestamp>",
"not_before":"<date timestamp>",
"resource":"https://api.dfp.dynamics.com",
"access_token":"<your access token; e.g.: eyJ0eXA...NFLCQ>"
}
Дополнительные сведения о маркерах доступа см. в следующей документации По Azure:
- Использование утверждения клиента для получения маркеров доступа из идентификатора Microsoft Entra
- Кэширование маркеров доступа
Вызов API
- Передайте следующие необходимые заголовки HTTP для каждого запроса.
Имя заголовка | Значение заголовка |
---|---|
Авторизация | Используйте следующий формат для этого заголовка: accesstoken носителя В этом формате accesstoken — это маркер, возвращаемый идентификатором Microsoft Entra. |
x-ms-correlation-id | Отправьте новое значение GUID для каждого набора вызовов API, выполненных вместе. |
Тип контента | application/json |
x-ms-dfpenvid | Отправьте значение GUID идентификатора экземпляра. |
Создайте полезные данные на основе событий. Заполните данные события соответствующими сведениями из системы.
Дополнительные сведения о поддерживаемых событиях см. в api защиты от мошенничества Dynamics 365.
Объедините заголовок (который включает маркер доступа) и полезные данные, а затем отправьте их в конечную точку Защиты от мошенничества. (Конечная точка API — это универсальный код ресурса (URI) для вашей среды и отображается на плитке сведений об учетной записи на панели мониторинга защиты от мошенничества.)
Дополнительные сведения об API см. в разделе API Dynamics 365 Для защиты от мошенничества.
Шаг 3. Общие сведения о событиях защиты учетных записей
Создание учетной записи
Используйте событие создания учетной записи для отправки сведений и контекста о входящей попытке создать новую учетную запись. Ответ содержит решение ДЛЯ API создания учетной записи.
URI: <конечная точка> API/v1.0/action/account/create/<signUpId>
Значение signUpId должно быть уникальным для каждого запроса. Оно должно соответствовать значению в разделе метаданных в следующем примере.
Внимание
Значение deviceContextId должно соответствовать значению session_id в параметрах отпечатков пальцев устройства.
Пример полезных данных
{
"device": {
"deviceContextId": "2cf391cc-62d2-47d4-a9c1-78ec025293da",
"ipAddress": "192.168.8.214",
"provider": "DFPFingerprinting",
"externalDeviceId": "1234567890",
"externalDeviceType": "Tablet"
},
"user": {
"userId": " 00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"userType": "Consumer",
"username": "kayla@contoso.com",
"firstName": "Kayla",
"lastName": "Goderich",
"countryRegion": "US",
"zipCode": "44329",
"timeZone": "-08:00",
"language": "en-us",
"membershipId": " CC004567",
"isMembershipIdUsername": false
},
"email": [
{
"emailType": "Primary",
"emailValue": "kayla@contoso.com",
"isEmailValidated": true,
"emailValidatedDate": "2018-11-27T15:12:26.9733817-08:00",
"isEmailUsername": true
}
],
"phone": [
{
"phoneType": "Alternative",
"phoneNumber": "1-4985550190",
"isPhoneNumberValidated": true,
"phoneNumberValidatedDate": "2018-11-27T15:12:26.9739451-08:00",
"isPhoneUsername": false
}
],
"address": [
{
"addressType": "Primary",
"firstName": "Kayla",
"lastName": "Goderich",
"phoneNumber": "1-4985550190",
"street1": "0123 Bechtelar Loop",
"street2": "",
"street3": "",
"city": "Kubtown",
"state": "SC",
"district": "",
"zipCode": "44329",
"countryRegion": "US"
}
],
"paymentInstruments": [
{
"merchantPaymentInstrumentId": "6ac8406f-128a-41ce-a02d-1bbaa23fbe15",
"type": "Credit Card",
"creationDate": "2020-03-24T13:23:32.3247803-07:00",
"updateDate": "2020-03-24T13:23:32.3248203-07:00"
}
],
"ssoAuthenticationProvider": {
"authenticationProvider": "MerchantAuth",
"displayName": "Kayla Goderich"
},
"metadata": {
"signUpId": "f5085b48-0f9d-47f5-85d1-2c95e7842d39",
"customerLocalDate": "2020-02-25T15:12:26.9653975-08:00",
"assessmentType": "Protect",
"trackingId": "d65544f0-f8b4-4249-a5e0-94b32a25548f",
"merchantTimeStamp": "2020-11-27T15:12:26.9721842-08:00"
},
"name": "AP.AccountCreation",
"version": "0.5"
}
Имя входа учетной записи
Используйте событие входа учетной записи для отправки сведений и контекста о входящей попытке создать имя входа учетной записи. Ответ содержит решение для API входа учетной записи.
URI: <конечная точка> API/v1.0/action/account/login/<userId>
Значение userId должно соответствовать значению полезных данных. Каждый пользователь должен иметь уникальное значение. Здесь можно использовать значение GUID.
Внимание
Значение deviceContextId должно соответствовать значению session_id в параметрах отпечатков пальцев устройства.
Пример полезных данных
{
"device": {
"deviceContextId": "2ef10376-2ba8-4f36-a911-da438e5e5e27",
"ipAddress": "192.168.8.214",
"provider": "DFPFingerprinting",
"externalDeviceId": "1234567890",
"externalDeviceType": "Computer"
},
"user": {
"userId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"userType": "Consumer",
"username": "kayla@contoso.com",
"firstName": "Kayla",
"lastName": "Goderich",
"countryRegion": "US",
"zipCode": "44329",
"timeZone": "-08:00",
"language": "en-us",
"membershipId": "CC004567",
"isMembershipIdUsername": false
},
"recentUpdate": {
"lastPhoneNumberUpdateDate": "2018-11-127T15:22:42.3412611-08:00",
"lastEmailUpdateDate": "2018-11-127T15:22:42.3412611-08:00 ",
"lastAddressUpdateDate": "2018-11-127T15:22:42.3412611-08:00",
"lastPaymentInstrumentUpdateDate": "2018-11-127T15:22:42.3412611-08:00"
},
"ssoAuthenticationProvider": {
"authenticationProvider": "MerchantAuth",
"displayName": "Kayla Goderich"
},
"metadata": {
"LogInId": "a15d4a5d-fadc-49ab-8022-712fec597e22",
"customerLocalDate": "2020-02-25T15:22:42.3397533-08:00",
"assessmentType": "Protect",
"trackingId": "a14ebdca-9447-49b4-951e-26f6ccc4445c",
"merchantTimeStamp": "2020-11-27T15:22:42.3405921-08:00"
},
"name": "AP.AccountLogin",
"version": "0.5"
}
Состояние создания учетной записи
Используйте событие создания состояния учетной записи для отправки сведений и контекста о входящей попытке создать состояние учетной записи. Ответ содержит решение для API создания состояния учетной записи.
URI: <конечная точка> API/v1.0/observe/account/create/status/<signUpId>
Значение userId должно соответствовать значению полезных данных. Каждый пользователь должен иметь уникальное значение. Здесь можно использовать значение GUID.
Пример полезных данных
{
"metadata":{
"signUpId":"a6221a3f-c38c-429e-8fde-3026d8c29ed3",
"userId":"11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
"trackingId":"697a6bee-2d30-4132-92a6-c137aaf49c0a",
"merchantTimeStamp":"2020-04-03T13:23:32.3226335-07:00"
},
"statusDetails":{
"statusType":"Rejected",
"reasonType":"ChallengeAbandoned",
"challengeType":"Email",
"statusDate":"2020-04-03T13:23:32.3817714-07:00"
},
"name":"AP.AccountCreation.Status",
"version":"0.5"
}
Состояние входа учетной записи
Используйте событие "Состояние входа учетной записи" для отправки сведений и контекста о входящей попытке создать состояние входа учетной записи. Ответ содержит решение для API состояния входа учетной записи.
URI: <конечная точка> API/v1.0/observe/account/login/status/<userId>
Значение signUpId должно соответствовать значению полезных данных. Каждый из них должен иметь уникальное значение. Здесь можно использовать значение GUID.
Пример полезных данных
{
"metadata":{
"loginId":"dc4ea331-a6e5-4aa0-8eba-16b4d516a07d",
"userId":"11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
"trackingId":"dcd65c87-d3db-4a42-8ed3-3e59f443b994",
"merchantTimeStamp":"2020-04-03T13:23:32.3759321-07:00"
},
"statusDetails":{
"statusType":"Rejected",
"reasonType":"ChallengeAbandoned",
"challengeType":"Email",
"statusDate":"2020-04-03T13:23:32.3884589-07:00"
},
"name":"AP.AccountLogin.Status",
"version":"0.5"
}
Этикетка
Используйте событие Label для отправки дополнительных сведений в службу защиты от мошенничества, помимо данных, которые сообщают аналитику виртуального мошенничества и функциям мониторинга. API Label предоставляет дополнительную информацию для обучения модели, основанной на дополнительном наборе сигналов мошенничества. Он также отправляет сведения о транзакциях, учетных записях или инструментах оплаты и отменах.
URI: <конечная точка> API/v1.0/label/account/create/<userId>
Значение userId должно соответствовать значению в соответствующем API входа учетной записи.
Пример полезных данных
{
"metadata": {
"name": "AP.Label.Metadata",
"userId": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
"merchantTimeStamp": "2020-06-14T21:53:27.8822492-08:00",
"trackingId": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff"
},
"label": {
"eventTimeStamp": "2020-02-21T21:53:27.8822492-08:00",
"labelObjectType": "Account",
"labelObjectId": "userid",
"labelSource": "ManualReview",
"labelState": "AccountCompromised",
"labelReasonCode": "AccountFraud"
},
"name": "AP.Label",
"version": "0.5"
}
public enum LabelObjectTypeName
{
Purchase,
AccountCreation,
AccountLogin,
AccountUpdate,
CustomFraudEvaluation,
Account,
PaymentInstrument,
Email
}
public enum LabelSourceName
{
CustomerEscalation,
Chargeback,
TC40_SAFE,
ManualReview,
Refund,
OfflineAnalysis,
AccountProtectionReview
}
public enum LabelStateName
{
InquiryAccepted,
Fraud,
Disputed,
Reversed,
Abuse,
ResubmittedRequest,
AccountCompromised,
AccountNotCompromised
}
public enum LabelReasonCodeName
{
ProcessorResponseCode,
BankResponseCode,
FraudRefund,
AccountTakeOver,
PaymentInstrumentFraud,
AccountFraud,
Abuse,
FriendlyFraud,
AccountCredentialsLeaked,
PassedAccountProtectionChecks
}
Поздравляем! Вы успешно завершили обучение и готовы использовать возможности защиты учетных записей защиты от мошенничества.
Следующие шаги
Сведения о доступе и использовании других возможностей защиты от мошенничества см. в следующих документах: