php小編魚仔在解決電子郵件帳戶問題時,可能會遇到錯誤訊息“租用戶 GUID X 的租用戶不存在”,特別是當自己是唯一成員時。這個錯誤訊息可能會導致無法登入或存取電子郵件帳戶。針對這個問題,我們有一些解決方案可以嘗試,以恢復對電子郵件帳戶的存取和正常使用。在下文中,我們將介紹一些可能的解決方法和步驟,希望能為您解決問題提供協助。
我想閱讀我的個人帳戶的電子郵件,但收到「租戶 guid x 的租戶不存在」訊息。
我在 https://entra.microsoft.com/ 上使用單一租戶創建了一個應用程式
然後我授予它發送電子郵件的權限
然後我建立了一個客戶端金鑰
然後我使用此程式碼來取得令牌:
import(""github.com/azuread/microsoft-authentication-library-for-go/apps/confidential") cred, err := confidential.newcredfromsecret("{secret value}") if err != nil { log.println(err) return } confidentialclient, err := confidential.new("https://login.microsoftonline.com/{tenant id}", "{client id}", cred) if err != nil { log.println(err) return } scopes := []string{"https://graph.microsoft.com/.default"} result, err := confidentialclient.acquiretokensilent(context.todo(), scopes) if err != nil { result, err = confidentialclient.acquiretokenbycredential(context.todo(), scopes) if err != nil { log.println(err) return } }
我使用該程式碼成功取得了令牌
{ "account": { "additionalfields": null }, "idtoken": { "rawtoken": "", "additionalfields": null }, "accesstoken": "{token}", "expireson": "2023-12-13t14:57:09.4905758-05:00", "grantedscopes": [ "https://graph.microsoft.com/.default" ], "declinedscopes": null }
然後我取得使用者 id(我是唯一的使用者):
req, err := http.newrequest("get", "https://graph.microsoft.com/v1.0/users", nil) if err != nil { log.println(err) return } req.header.add("authorization", "{token}") client := http.client{} resp, err := client.do(req) if err != nil { log.println(err) return } body, err := io.readall(resp.body) if err != nil { log.println(err) return }
但是當我嘗試取得電子郵件時:
req, err := http.newrequest("get", "https://graph.microsoft.com/v1.0/users/{user_id}/messages", nil) if err != nil { log.println(err) return } req.header.add("authorization", "{token}") client := http.client{} resp, err := client.do(req) if err != nil { log.println(err) return } body, err := io.readall(resp.body) if err != nil { log.println(err) return }
我得到:
{ "error": { "code": "OrganizationFromTenantGuidNotFound", "message": "The tenant for tenant guid '0a6ac917-332a-4f47-881e-0b35fb1b2ab5' does not exist.", "innerError": { "oAuthEventOperationId": "c096c5c9-e743-4daa-9a97-d14d915e9842", "oAuthEventcV": "N0nHeUJm9gwnrFZefuEA4w.1.1", "errorUrl": "https://aka.ms/autherrors#error-InvalidTenant", "requestId": "c0272999-9743-44ee-98b5-947acc52e7d8", "date": "2023-12-13T19:11:22" } } }
錯誤上的id 0a6ac917-332a-4f47-881e-0b35fb1b2ab5
是tenand id
要閱讀個人 outlook 帳戶的郵件,需要切換到委託流程(例如互動流程或產生存取權杖的授權碼流程)並呼叫/me/ messages
端點。
註冊多租戶應用程序,帳戶類型為「任何組織目錄中的帳戶(任何microsoft entra id 租戶- 多租戶)和個人microsoft 帳戶(例如skype、xbox)” >“:
如果您使用互動流產生令牌,請確保啟用公用用戶端選項:
現在,根據您的需求在您的應用程式註冊中新增委託類型的#mail.read
或mail.readwrite
權限:
要使用互動流產生存取權杖,您可以參考此範例go程式碼,然後使用它來呼叫 /me/messages
端點:
package public_test import ( "context" "github.com/azuread/microsoft-authentication-library-for-go/apps/public" ) func example() { client, err := public.new("client_id", public.withauthority("https://login.microsoftonline.com/common")) if err != nil { } var result public.authresult scopes := []string{"https://graph.microsoft.com/.default"} accounts, err := client.accounts(context.todo()) if err != nil { // todo: handle error } if len(accounts) > 0 { result, err = client.acquiretokensilent(context.todo(), scopes, public.withsilentaccount(accounts[0])) } if err != nil || len(accounts) == 0 { result, err = client.acquiretokeninteractive(context.todo(), scopes) if err != nil { } } _ = result.account _ = result.accesstoken }
您也可以登入graph explorer 使用該帳戶並執行下列查詢來取得電子郵件:
GET https://graph.microsoft.com/v1.0/me/messages
回應:
參考:
#以上是'租戶 GUID X 的租戶不存在”,對於自己的電子郵件帳戶(我是唯一的成員)的詳細內容。更多資訊請關注PHP中文網其他相關文章!