Я создал пользовательские политики с SSO и переносом учетной записи (вы можете просмотреть их на GitHub здесь, Примечание: я удалил/отредактировал значения из соображений безопасности). Я хочу, чтобы пользователи могли в первый раз войти в систему с помощью социальной сети ИЛИ локальной учетной записи. Затем я перенесу их учетную запись из устаревшего поставщика удостоверений в AAD B2C. Однако в данный момент происходит следующее.
Самая большая проблема заключается в том, что когда учетная запись переносится и пользователь может войти в систему, то при попытке связать социальные учетные записи я получаю следующую ошибку.
AADB2C90051: No suitable claims providers were found.
Correlation ID: 4491cd4a-2f98-4a86-8d65-da3f7f26e890
Timestamp: 2022-11-20 10:38:05Z
Странно то, что если я сначала войду в систему с помощью Google или Facebook (которые затем переносят учетную запись), а затем войду в систему с помощью Microsoft или локальной учетной записи, это сработает. Но при первом входе в систему с помощью Microsoft или локальной учетной записи я получаю сообщение об ошибке.
По умолчанию свойство hasPassword
не существует для существующих локальных профилей пользователей B2C. Он вводится путем связывания Custom Policy. Вам нужно будет вручную (или с помощью скрипта) добавить значение true
для этого свойства, и оно начнет работать.
Вы можете использовать Graph API для добавления ценности, поэтому в основном PATCH для конечной точки пользователя:
PATCH /v1.0/users/12bda93c-f782-431c-b962-52c5304c0668 HTTP/1.1
Host: graph.microsoft.com
Content-Type: application/json
Authorization: Bearer eyJ0...
{
"extension_67a963aa6ce74511923b85511f0f8dad_hasPassword" : true
}
Полное обсуждение смотрите здесь: https://bytemeta.vip/repo/azure-ad-b2c/samples/issues/430
Немного связано с этим вопросом, но сценарий другой: AAD-FindLocalAccountWithSocialEmail выдает Подходящие поставщики утверждений не найдены
А для модераторов, не разбирающихся в предметной области и испытывающих желание удалить этот ответ или вопрос как дубликат: сценарий в вопросе другой, а ответ тот же.