我正在使用带有内置“注册和登录”用户流程的 Azure B2C。当用户注册时,将创建一个帐户作为本地帐户。电子邮件仅在
Identities
属性中可用,mail
和 OtherMails
属性为空。
现在我需要使用 MS graph API 通过电子邮件和其他一些属性搜索用户
User
端点:
https://graph.microsoft.com/v1.0/users?$filter=identities/any(id:id/issuer+eq+'mytenant.onmicrosoft.com'+and+id/issuerAssignedId+eq+'[email protected]')+and+creationType+eq+'LocalAccount'
此 HTTP 请求将生成以下异常。
“不支持对属性身份进行复杂查询。
出现异常是因为我正在使用
identities
属性和其他一些属性搜索电子邮件。有没有办法通过电子邮件和其他属性(姓名等)搜索用户 - 如果不可能,是否有办法强制用户流将电子邮件存储在 mail
属性中?
发生错误的原因是identities
属性上的
直接过滤不支持复杂查询。
我使用注册登录用户流程注册了一名用户,该用户创建为 本地帐户,并在 identities 属性中使用电子邮件地址,如下所示:
当我使用 MS graph API 通过电子邮件从 identities
和其他一些属性向
filter用户运行查询时,我也遇到了 同样的错误:
GET https://graph.microsoft.com/v1.0/users?$filter=identities/any(id:id/issuer+eq+'yourtenant.onmicrosoft.com'+and+id/issuerAssignedId+eq+'[email protected]')+and+creationType+eq+'LocalAccount'
回复:
或者,您可以使用任何编码语言通过在本地应用过滤来自定义所有用户列表的响应。
在我的例子中,我使用了下面的 Microsoft Graph PowerShell 脚本并成功获得了 filtered user 的响应,如下所示:
Connect-MgGraph -Scope "User.Read.All" -TenantId "b2c_tenant_id"
$allUsers = Get-MgUser -Property "id,displayName,identities,mail,creationType"
$emailToFilter = "[email protected]"
$filteredUsers = $allUsers | Where-Object {
($_.Identities -ne $null -and $_.Identities.signInType -eq 'emailAddress' -and $_.Identities.issuerAssignedId -eq $emailToFilter) -and
$_.CreationType -eq 'LocalAccount'
}
$filteredUsers | Select-Object id, displayName, @{Name="Identities";Expression={$_.Identities | ConvertTo-Json -Depth 10 -Compress}}
回复:
AFAIK,强制 用户流 将电子邮件存储在
mail
属性中是不可能的。作为一种解决方法,您可以创建一个扩展属性来在通过注册和登录流程注册时存储电子邮件地址。