2017-02-27 221 views
1

對於如何使用MS Graph API,我感到非常困惑。MS Graph API身份驗證令牌不返回作用域

我試圖將服務器端守護進程(webapp)記錄到Azure中,然後訪問Office 365實例中的OneDrive。 (1)我創建了一個具有Web應用程序/ API類型的應用程序Azure門戶。然後,我授予它在Azure門戶內的訪問權限,以授予我可以訪問的所有權限。 (2)然後我進入MS應用程序控制臺(apps.dev.microsoft.com),並在那裏給它訪問。爲什麼有兩組權限? (3)還創建了一個密鑰和密碼。 (4)我這樣做(a)發送請求以獲得帶有密鑰/密碼的令牌,(b)使用令牌與圖端點交談。

首先它不起作用,但後來我給應用程序一個管理員'同意',它似乎就像它的工作。

問題是,正如你在下面看到的那樣,令牌上根本沒有範圍。所有到處添加的權限似乎都沒有提供範圍?

Missing scope in token

什麼是離奇的是我試圖讓在O365的/驅動器,下面的resposne回來。很顯然,有一些驅動器,但據我所知,驅動器似乎沒有所有者,據我所知,它不是個人驅動器或共享驅動器。

mystery drives

注: (一)我認爲這個問題是類似於此one (二)爲什麼我需要做的「同意」的事情?我不希望用戶重定向,我只希望我的服務器端應用程序能夠將文件/文件夾保存到OneDrive。

任何想法?這似乎是一個非常簡單的用例,但是ms圖的表現很奇怪。

有人可以告訴我,如果過程是正確的,即(a)獲得令牌,(b)使用令牌。這裏有'同意'的另一個神奇的步驟,如果是的話,它在哪裏記錄?

+0

您需要解碼訪問令牌。使用像這樣的網站:http://calebb.net/,並粘貼原始訪問令牌。然後,您應該能夠看到完全正常工作的索賠 –

+0

。爲什麼他們不會記錄這樣的事情顯然超出了我的意料。沒有哪個說的地方,這個標記是一個jwt,按照你的意願使用。 –

+0

我會爲此寫一個正確的答案。現在一切似乎都按預期工作。我仍然有點困惑,以什麼驅動器信息回來,但它應該沒問題。 –

回答

2

這裏有幾個不同的地方會增加混淆,但實際答案很簡單。

(1)範圍標記:如Shawn Tabrizi所述,access_token本身包含範圍信息。來自MS的許多文檔站點在返回的令牌中顯示了一個distict範圍字段。這是(顯然 - 找不到正式文件)不再是這種情況。 (2)爲了弄清楚你是否給令牌給了正確的範圍,簡單地將你的access_token複製到一個JWT轉換器中,例如calebb.net。也從Shawn。 (3)很多混淆是關於在何處以及如何給予正確的權限。 (a)在Azure門戶中,轉到Azure Active Directory並添加新的Web應用程序。我的用例特別是服務器端JS應用程序。 「應用程序註冊」面板中的第一行,在「添加」和「端點」按鈕之後顯示「要查看和管理融合應用程序的註冊,請訪問Microsoft應用程序控制臺」。忽略這個。 (b)如果您點擊它,它會將您帶到MS的應用程序註冊服務,這會增加一大堆混亂。只需堅持正常的Azure門戶(新的花式門戶),它會爲你節省不幸。 (c)有幾個id,關於你應該用什麼的信息很少。假設你的用例使用MS Graph API,你需要3件事情。

  • tenantID:這是通過單擊端點按鈕並使用與OAuth令牌相關的端點找到的。它看起來像8alphanumric-4aphanumeric-4aphanumeric-4aphanumeric-12alphanumric對我來說。
  • 客戶端ID:這是您的應用程序ID。所以你有一個顯示名稱(應用程序名稱),應用程序ID(8-4-4-4-12字母)[這是你需要的客戶端ID],應用程序類型(Web應用程序/ API)和對象ID(8 -4-4-4-12 alphanumric)[忽略此]
  • 客戶端祕密:這是不明顯的。點擊所有設置。然後去鍵。在這裏你將構成一個關鍵。給它任何名字(無所謂),把持續時間設置爲你所需要的。當你點擊保存時,它會給你一個鍵。這是你的客戶祕密。不知道如果創建超過1會發生什麼情況。欣賞可以擁有多個密鑰的情感,但我的用例不需要我進行調查。

(d)權限:該文檔顯示了一些有關將權限放入應用程序中心以及其他內容的內容。堆棧溢出問題涉及'同意'和'管理員權限'。忽略大部分這一點。 (e)您的應用程序已經擁有Windows Azure Active Directory的權限。有2種權限,委託和應用。委託意味着(我認爲)一個工作流程,用戶在這個工作流程中作爲一個單獨的步驟登錄到他們的<whatever>帳戶中,恰好使用AD身份驗證。 (f)對於我的用例的服務器端應用程序,您只需要應用程序權限。添加任何你需要的。

(g)現在在權限中添加一個API,MS Graph在這種情況下。同樣,我的用例意味着我只需要應用程序權限。

(h)什麼是同意?一旦你添加了權限,並點擊保存,點擊'添加'旁邊的'授予權限'按鈕。您只需在更改後執行此操作。這是管理員授權應用程序的明確步驟,同意所有需要的權限。

(i)完成所需的權限後,轉到屬性。它構成了一個App Id URI,您需要點擊save for。

畢竟這些東西(只有一次),應用程序應該正常工作。解析access_token,看看你是否擁有所有正確的權限。基本流程是獲取令牌,並使用令牌來做任何事情。

請注意,圖中應用程序流的一半東西是狡猾的(此刻)。這些功能非常好,但很多路由不適用於僅應用程序訪問,但適用於用戶(委派)訪問。閱讀已知問題,看看在哪裏。我有幸與用戶和共享郵箱被應用程序訪問。目前(2017年3月1日),團隊對web應用程序訪問的支持相當不滿。

相關問題