幾天來,我一直在嘗試這樣做,并且我根據示例仔細檢查了所有內容,并嘗試搜索我的錯誤回應,但我無法提出任何建議。
我已經成功地將圖形 api 呼叫添加到我的應用程式中,當我在 /users 端點上執行 GET 時,它會很好地回傳我的 AD 用戶,下面的代碼是我正在嘗試創建用戶但每次我得到 ResourceNotFound 回應.
可能我們值得注意的是,起初我收到一條錯誤訊息,它沒有說明它找不到的資源,但現在錯誤訊息顯示'資源'用戶_'不存在......'
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
我注意到的另一件事是該應用程式從不包含任何用戶,因此始終呼叫范圍唯一令牌。
uj5u.com熱心網友回復:
嘗試一些東西 -
- 正如 Tim 建議的那樣,使用相同的令牌和 JSON 內容,看看您是否可以利用 Postman 并呼叫相同的 API 來驗證您的 JSON(請求正文)、URL 和令牌。
- 使用 jwt.ms 并檢查您的令牌是否具有所有必要的宣告。
- 確保您已為您的應用授予所需的權限。
如果您仍然面臨同樣的問題,請使用 client-request-id 和時間戳進行還原,以便我可以更好地檢查它。
謝謝。
uj5u.com熱心網友回復:
在這里發布后,我還請求微軟支持團隊的幫助。
他們建議我使用圖形瀏覽器再試一次,所以在這樣做并在 Insomnia 中重新發送我的請求之后,我實際上在使用圖形瀏覽器時確實得到了成功的回應,但仍然是來自 Insomnia 和代碼的 BadRequest。
這些請求之間的區別在于請求正文。
我最初構建的是使用此處圖形檔案中提供的代碼示例(示例 1) - https://docs.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": "[email protected]",
"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}"
}
在更改了我的代碼模型以匹配第二個請求主體之后,我現在在代碼中獲得了成功的回應,并測驗了我將舊請求主體留在 Insomnia 中并使用新令牌重新發送請求并回傳 BadRequest 而代碼回傳成功的理論.
我不是 100% 確定丟失的屬性是什么,也許只是密碼策略。如果微軟給我更多的見解,我會在這里更新。
希望這可以為其他人提供一些見解,因為我自己真的很難找到關于這個的資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/406394.html
標籤:
