簡體   English   中英

如何獲取已登錄用戶的Azure AD訪問令牌?

[英]How to get Azure AD access token for already logged in user?

我們在Microsoft Azure平台中運行一個應用程序服務(一個PHP網站)。 只有在用戶已經登錄后,才能訪問該網站。身份驗證基於Azure AD。 一切正常。

現在,從網站的PHP代碼中,我想獲取已登錄用戶的Azure AD組成員身份。

我閱讀了很多Web資源,解釋了如何從網站登錄用戶到Azure AD,從而獲得授權/訪問令牌,以執行其他操作,例如檢索組成員身份和許多其他內容。 但這不是我想要的。 用戶已經登錄並且可以成功使用該網站。 (否則,Microsoft會將用戶重定向到單點登錄頁面。)

使用PHP,例如,我可以從對網站的任何訪問的請求標頭中檢索登錄用戶的用戶名。 並且在請求標頭中還存儲了一些“訪問令牌”,以及其他內容,例如“客戶端主體ID”。 但是我不知道這是否是我可以用於其他操作的授權/訪問令牌。 也許/也許我做錯了什么。 例如,使用cURL請求https://graph.microsoft.com/v1.0/me/memberOf ,我收到一個InvalidAuthenticationToken錯誤,提示“ CompactToken解析失敗”。 我把“授權:承載{訪問令牌}”和“接受:應用/ JSON”到請求頭中將此作為解釋在這里 (我沒有關於令牌類型的明確信息,因此我只像示例中那樣假設“承載者”是正確的。也許這已經是錯誤的。)

我不知道如何進行解決。 也許我遺漏的一點根本不在我的cURL請求中,而是在AD和/或App Service的Azure設置中。 我希望您能提供幫助。

您走在正確的軌道上。

訪問令牌

使用OAuth2或OIDC針對Azure AD成功進行身份驗證后,您將獲得訪問令牌 訪問令牌是基於64位編碼的JSON Web令牌(JWT),可用於訪問其他受保護的資源。

訪問令牌可能看起來像這樣:

EwAoA8l6BAAU ... 7PqHGsykYj7A0XqHCjbKKgWSkcAg==

您可以使用https://jwt.io進一步瀏覽其內容。

注意:以上令牌已縮短。 就其完整形式而言,它相當長。

在其他工作中,您需要訪問令牌來針對將來使用相同身份提供者(在本示例中為Azure AD)保護的任何API發出請求。

訪問受保護的API

但是,在使用令牌訪問任何API之前,必須首先授予Azure AD應用程序必要的權限。 看到這個鏈接

注意:該鏈接適用於v1.0 Azure AD終結點。

排序所需的權限后,就可以開始執行請求。 您發出的請求看起來像,例如

GET https://graph.microsoft.com/v1.0/me 
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw
Host: graph.microsoft.com

在這里,令牌是在Authorization: Bearer

進一步閱讀

請參閱此鏈接以進一步閱讀。 該鏈接包含有關如何使用v2.0 Azure AD終結點的說明,但總體思路是相同的:

  1. 注冊一個應用
  2. 授予應用訪問資源的權限
  3. 獲取訪問令牌
  4. 使用令牌執行請求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM