我需要遵循一些业务规则,从 ASP.NET Core 2 应用程序向用户发送电子邮件。但是,我需要确保电子邮件发送到的帐户确实存在(由于某种原因,该帐户可能不再有效)。客户正在使用 Azure Active Directory,因此我需要以某种方式查询 AAD,以便让我知道该帐户是否存在。
到目前为止,我一直在寻找 Microsoft Graph 作为实现此目的的方法,但是到目前为止我看到的每个示例都需要事先进行身份验证并使用委托身份验证机制。我不希望我的用户必须进行身份验证,也不提示身份验证屏幕。
鉴于这种情况,您建议使用什么?如果您也能给我举一个例子,那就太好了。谢谢!
您实际上不需要像在当前代码中那样为每个无效用户抛出/捕获异常。一般来说,出于其他原因,我不反对异常处理,但要查看用户是否存在,您可以尝试使用Filter
.
所以你的图形查询可能看起来像 -
https://graph.microsoft.com/v1.0/users?$filter=startswith(userPrincipalName,'[email protected]')
我已经展示了startswith
在这里因为eq
在快速试验中对我不起作用。虽然我会推荐两件事:
- 请在此处浏览有关过滤器的 Microsoft 文档,看看什么最适合您的要求 -使用查询参数通过 Microsoft Graph 自定义响应
- 尝试一下不同的查询微软图形浏览器它非常简单且易于使用。
这是您的代码的修改版本。
请注意,我正在检查集合计数是否> 0,而不是检查它是否为空,因为即使未找到用户,UsersCollectionPage 在我的测试运行中也不为空。
using Microsoft.Identity.Client;
using Microsoft.Graph.Auth;
using Microsoft.Graph;
...
private async Task<bool> ValidateAccounts(string accounts) {
var confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create("clientId here")
.WithTenantId("tokenId here")
.WithClientSecret("secret here")
.Build();
var authProvider = new ClientCredentialProvider(confidentialClientApplication);
var graphClient = new GraphServiceClient(authProvider);
var valid = true;
try {
foreach (var account in accounts.Split(';')) {
var user = await graphClient.Users.Request().Filter("startswith(userPrincipalName, '" + account + "')").GetAsync();
if (user.Count <= 0) {
valid = false;
break;
}
}
} catch (ServiceException ex) {
valid = false;
}
return valid;
}
顺便说一句,我不确定您的要求,但您可能可以通过在单个查询中组合多个用户名然后检查结果计数或其他属性来发挥创意。你可以使用or
多个标准之间或可能使用any
操作员。不过我还没有真正尝试过。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)