【发布时间】:2020-04-24 17:34:28
【问题描述】:
我正在使用自定义策略在 Azure AD B2C 中注册用户。 最后一步,在发布 JWT 之前,技术配置文件会执行以下操作:
<!-- Store the user in the AD -->
<ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonEmail" ContinueOnError="false" />
<!-- Sends the user information, including ObjectId to website to store locally-->
<ValidationTechnicalProfile ReferenceId="REST-SendUserInformation" ContinueOnError="false"/>
所以,这很好用。但是,在我的代码中,如果步骤 2 中出现问题(将用户信息发送到本地存储),我会调用 Graph API 来删除刚刚创建的用户。 但是,我注意到 Graph API 在我“调试”时工作(这意味着需要一些时间单击下一步..下一步...),但是当它在服务器中运行时,用户不会从 AD 中删除。 它不会抛出异常。
我删除用户的代码如下:
public AzureGraphService(IConfiguration configuration)
{
var azureOptions = new AzureAdOptions();
configuration.Bind("AzureAdB2C", azureOptions);
// Client credential provider is used by services and desktop applications to acquire Microsoft Graph access token without a user.
_confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(azureOptions.ClientId)
.WithTenantId(azureOptions.Domain)
.WithClientSecret(azureOptions.ClientSecret)
.Build();
ClientCredentialProvider authProvider = new ClientCredentialProvider(_confidentialClientApplication);
// Set up the Microsoft Graph service client with client credentials
_graphClient = new GraphServiceClient(authProvider);
}
public async Task DeleteUserFromAD(string azuresubid)
{
try
{
// Delete user by object ID
await _graphClient.Users[azuresubid]
.Request()
.DeleteAsync();
}
catch (Exception ex)
{
// TODO - Log exception?
throw ex;
}
}
在 Azure AD B2C 中查看审核日志后,我发现了这个 “ObjectNotFoundException”。
但是,我确定对象是正确的,并且我用来删除的 objectID 也是正确的,因为如果我“调试”(慢慢地)它就可以工作。
我的问题是: 在 AD B2C 中创建对象(用户)与我可以从那里实际查看和删除对象的时间之间是否存在延迟?
谢谢
【问题讨论】:
-
从你的描述看来,直接运行程序的时候,这个用户并没有创建成功。但是当你调试时(慢慢做),它已经创建成功了。因此可以删除。能否在代码中设置时间间隔进行测试?
-
您好!用户确实是在 AD 中创建的,我什至在注册期间从 azure 获取 objectID 以存储在数据库中,同时调用我的 REST api,如果出现问题,可能会删除用户。我尝试添加 5s 的延迟,但仍然没有从 AD 中删除用户,并且出现相同的 objectNotFound 异常,这没有任何意义,因为当我看到审计日志和异常时,“目标”是正确的 objectID。
-
你是怎么调用
DeleteUserFromAD方法的?你能用DeleteUserFromAD方法打印azuresubid吗? -
@TonyJu 我在另一个方法中调用此方法,只需调用该方法并传递 objectId
await _azureGraphService.DeleteUserFromAD(objectId); -
@HenriqueBelotto 你能得到
DeleteUserFromAD方法中的objectId吗?
标签: azure-active-directory microsoft-graph-api azure-ad-b2c