首頁 >後端開發 >Golang >'租戶 GUID X 的租戶不存在”,對於自己的電子郵件帳戶(我是唯一的成員)

'租戶 GUID X 的租戶不存在”,對於自己的電子郵件帳戶(我是唯一的成員)

WBOY
WBOY轉載
2024-02-13 16:20:091285瀏覽

“租户 GUID X 的租户不存在”,对于自己的电子邮件帐户(我是唯一的成员)

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.readmail.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

回應:

參考:

微軟驗證-library-for-go/apps/public/example_test.go 位於 main · azuread/microsoft-authentication-library-for-go · github

#

以上是'租戶 GUID X 的租戶不存在”,對於自己的電子郵件帳戶(我是唯一的成員)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除