我已经尝试了几天了,我已经重复检查了所有的例子,并试图搜索我的错误反应,但我无法想出任何东西。
我已经成功地将图形api调用添加到我的应用程序中,当我在/users端点上执行GET时,它会很好地返回我的AD用户,下面的代码就是我尝试创建用户的代码,但是每次我得到ResourceNotFound响应时都会这样做。
值得注意的是,起初我收到了一条错误消息,它没有说明它找不到的资源,但现在错误消息显示“资源”User_不存在.
GUID每次都会发生变化,这意味着它正在创建该对象,然后尝试使用它做一些事情,但是在某个API上失败了。
创建用户功能-
Public Function CreateUser(user As User) As String
Dim app As IConfidentialClientApplication = MsalAppBuilder.BuildConfidentialClientApplication(ClaimsPrincipal.Current)
Dim accountId = ClaimsPrincipal.Current.GetMsalAccountId()
Dim account = app.GetAccountAsync(accountId).Result
Dim result As AuthenticationResult
Dim scopes As String() = {"https://graph.microsoft.com/.default"}
Try
result = app.AcquireTokenSilent(scopes, account).ExecuteAsync().Result
Catch msalEx As MsalUiRequiredException
Return msalEx.Message
Catch ex As Exception
result = app.AcquireTokenForClient(scopes).ExecuteAsync().Result
End Try
Dim client = New HttpClient()
Dim request As New HttpRequestMessage(HttpMethod.Post, "https://graph.microsoft.com/v1.0/users")
request.Headers.Authorization = New AuthenticationHeaderValue("Bearer", result.AccessToken)
Dim json = JsonConvert.SerializeObject(user)
request.Content = New StringContent(json, Encoding.UTF8, "application/json")
Dim response = client.SendAsync(request).Result
If response.Content IsNot Nothing Then
Dim responseString = response.Content.ReadAsStringAsync().Result
Return responseString
End If
Return ""
End Function
我还注意到,这个应用程序从来不包含任何用户,所以范围只标记总是被调用的。
发布于 2022-01-06 11:03:11
试几样东西-
提供了所需的权限。
如果您仍然面临同样的问题,请使用客户端请求id和时间戳进行恢复,这样我就可以更好地检查它。
谢谢。
发布于 2022-01-06 12:06:12
在这里发布之后,我还请求microsoft支持小组提供帮助。
他们建议我使用图形资源管理器再试一次,所以在做了这两件事之后,我在失眠症中重新发送了我的请求,实际上,当我使用图形资源管理器,仍然使用来自失眠和代码的BadRequest时,我得到了一个成功的响应。
这些请求之间的区别是请求主体。
我最初构建的是使用这里的图文档中提供的代码示例(示例1) - https://learn.microsoft.com/en-us/graph/api/user-post-users?view=graph-rest-1.0&tabs=http。
为了节省你的时间,这看起来就像-
POST https://graph.microsoft.com/v1.0/users
Content-type: application/json
{
"accountEnabled": true,
"displayName": "Adele Vance",
"mailNickname": "AdeleV",
"userPrincipalName": "AdeleV@contoso.onmicrosoft.com",
"passwordProfile" : {
"forceChangePasswordNextSignIn": true,
"password": "xWwvJ]6NMw+bWH-d"
}
}
这就是请求体在图形浏览器中的样子-
{
"accountEnabled": true,
"city": "Seattle",
"country": "United States",
"department": "Sales & Marketing",
"displayName": "Melissa Darrow",
"givenName": "Melissa",
"jobTitle": "Marketing Director",
"mailNickname": "MelissaD",
"passwordPolicies": "DisablePasswordExpiration",
"passwordProfile": {
"password": "b85dba0d-be1b-a59a-8332-6821b138674d",
"forceChangePasswordNextSignIn": false
},
"officeLocation": "131/1105",
"postalCode": "98052",
"preferredLanguage": "en-US",
"state": "WA",
"streetAddress": "9256 Towne Center Dr., Suite 400",
"surname": "Darrow",
"mobilePhone": "+1 206 555 0110",
"usageLocation": "US",
"userPrincipalName": "MelissaD@{domain}"
}
在更改代码模型以匹配第二个请求体之后,我现在在代码中获得了成功的响应,并测试了我将旧请求体留在失眠症中的理论,并使用一个新的令牌对请求表示不满,它返回BadRequest,而代码返回成功。
我不能百分之百确定丢失的属性是什么,也许只是密码策略。如果微软给我更多的洞察力,我会在这里更新。
希望这能为其他人提供一些洞察力,因为我自己确实很难找到这方面的信息。
https://stackoverflow.com/questions/70590440
复制相似问题