Согласно предыдущим вопросам в моей учетной записи, моя команда и я в настоящее время создаем приложение Windows Forms на C#, чтобы позволить нашему администратору зарегистрировать компанию и всех ее пользователей в нашей системе. В настоящее время мы можем зарегистрировать отдельных пользователей в арендаторе и предоставить им GUID для идентификатора компании, и они будут разделены, как и должно быть, но в настоящее время это не дает им доступа.
После создания в B2C их необходимо перенести в таблицу в Azure Cosmos DB, чтобы они могли войти в систему.
В настоящее время пользователь добавляется в арендатор следующим образом:
private async Task<string> EnrollNewUser()
{
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "...";
var clientId = "...";
var clientSecret = "...";
ClientSecretCredential clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
string displayName = ESUDisplayNametxt.Text;
string compId = esuCompIdtxt.Text;
string givenName = ESUFirstNametxt.Text;
string surname = ESUSurnametxt.Text;
string phone = ESUPhoneNumtxt.Text;
string mail = ESUEmailtxt.Text;
string membershipLevel = ESUComboMembership.SelectedItem.ToString();
string groupId;
switch (membershipLevel)
{
case "No Membership":
groupId = "";
break;
case "Bronze":
groupId = "7118bcda-eb9d-433a-b37e-58c193c90b66";
break;
case "Silver":
groupId = "ae1044e3-b711-4d97-b73a-96de89c8e005";
break;
case "Gold":
groupId = "952894ab-7b7a-4f70-8b1d-ee7a8dbbd6aa";
break;
case "Admin":
groupId = "048fd54e-760e-41af-8e8f-c18f02f0d58d";
break;
default:
MessageBox.Show("Invalid option. Group ID left empty.");
groupId = "";
break;
}
string password = GeneratePassword();
List<string> businessPhones = new List<string> { phone };
var requestBody = new User
{
DisplayName = displayName,
City = compId,
GivenName = givenName,
Surname = surname,
BusinessPhones = businessPhones,
Mail = mail,
Identities = new List<ObjectIdentity>
{
new ObjectIdentity
{
SignInType = "emailAddress",
Issuer = "devB2CTennant.onmicrosoft.com",
IssuerAssignedId = mail,
}
},
PasswordProfile = new PasswordProfile
{
Password = password,
ForceChangePasswordNextSignIn = false,
},
PasswordPolicies = "DisablePasswordExpiration",
};
try
{
var user = await graphClient.Users.PostAsync(requestBody);
if (!string.IsNullOrEmpty(groupId))
{
var refRequestBody = new ReferenceCreate
{
OdataId = $"https://graph.microsoft.com/v1.0/directoryObjects/{user.Id}",
};
await graphClient.Groups[groupId].Members.Ref.PostAsync(refRequestBody);
}
MessageBox.Show($"User {displayName} created successfully with password: {password}");
}
catch (Exception ex)
{
MessageBox.Show($"Error creating user: {ex.Message}");
}
return password;
}
Возможно ли это с этой позиции или нужно больше логики, чтобы заставить Cosmos и B2C взаимодействовать друг с другом?
Итак, похоже, мне нужна дополнительная функция, чтобы затем добавить ее в Cosmos? Если я это правильно прочитал
Да, это должно быть индивидуальное
Обратите внимание: Azure AD B2C изначально не поддерживает хранение пользовательских данных во внешних источниках данных, таких как Azure Cosmos DB, поэтому эта реализация является специальным решением.
Используйте коннектор API:
Использованная литература:
Сопоставление пользователей Azure AD B2C с таблицей базы данных Azure Sql — вопросы и ответы Microsoft, автор Альфредо Ревилла
azure — Как объединить AD B2C (MSAL) и CosmosDB — Stack Overflow на русском
Проверьте это Learn.microsoft.com/en-us/answers/questions/1121673/…