簡體   English   中英

如何使用 Azure AD 向 web 服務驗證移動應用程序?

[英]How to authenticate mobile app to web service using Azure AD?

目前我有這個設置:

在此處輸入圖像描述

在登錄時以及登錄后的每個后續請求中,我構建的移動應用程序使用基本身份驗證通過 web 服務對用戶進行身份驗證,該服務為應用程序提供請求的信息。

On every request the Authorization header is inspected, the password and username are extracted from the header, the password is hashed using a proprietary DLL (so the web service doesn't actually contain the hashing algorithm) and compared to the hashed password associated with the存儲在數據庫中的用戶名。

我現在被要求在登錄選項中包含 Azure AD SSO。 在閱讀了有關該主題的大量內容后,在我看來,這就像設置:

在此處輸入圖像描述

我很好奇一些事情:

  1. 這個設置是否正確,或多或少?
  2. 應用程序是否將身份令牌發送到 web 服務? 如果是這樣,Web 服務如何驗證該令牌?
  3. 使用安全令牌中的聲明之一,Web 服務可以將 Azure 身份與 DB 用戶匹配是否正確?
  4. 訪問令牌在這張圖片中的位置是什么?

謝謝您的幫助!

(旁注:我知道在第一種情況下,基本身份驗證不是 go 的首選方式。在我們開發令牌處理代碼之前,這是一個臨時決定,它只能使用 HTTPS 工作,這是一個內部應用程序 - 你不會除非您有我們給您的代碼,否則能夠激活該應用程序)

我對 azure 廣告幾乎沒有經驗,但我想我們可以談談你的情況。

首先,無論 id 令牌和訪問令牌都是 jwt 令牌,因此對於您的 web 服務應用程序,您需要使用jwt 解碼庫來解密令牌並獲取它包含的聲明。 這里我們需要知道 id token 和 access token 的區別,我想你應該知道,對於你的 web 服務應用,如果它更有可能扮演一個 api 應用的角色,你需要使用access token因為這個 token還包含用戶信息。 然后您需要在程序中添加代碼來解碼令牌並檢查它是否是請求的“有效”令牌。(因為您已經使用 azure 廣告來實現登錄部分,您不需要使用自定義登錄部分。)

接下來,azure 廣告提供的登錄功能需要使用 azure 廣告所屬租戶中的帳號和密碼,用戶帳號可能類似於 xx@xx.onmicrosoft.Z4D236D9A2D102C5FE6AD1C50DA4 帳號,但不需要保留 syECZB 帳號在您的數據庫中,因此您很難且無需將從解碼令牌中獲得的用戶名與數據庫中的用戶名進行比較。 因為當您的 web 服務收到令牌(id 或訪問令牌)時,這意味着有人通過了 azure 廣告的身份驗證。 令牌包含用戶信息,包括角色、過期時間等。您需要檢查令牌是否已過期以及是否具有正確的 scope。 (我們來看一個常見的情況,microsoft提供了很多graph apis可以調用,當訪問這些api時,我們需要在請求頭中提供與scope匹配的access token,例如Z5E056C500A1C4B6A7110B50D807需要。 User.Read 的授權 api 權限)

在這里總結一下,如果您的 web 服務只需要您數據庫中的用戶登錄然后可以訪問,id 令牌和訪問令牌都適合您,因為它們都包含像“xx@xx.onmicrosoft.com”這樣的用戶名,您需要做的是解碼令牌並檢查令牌是否已過期以及該用戶是否存在於您的數據庫中(您可以在它們之間設置映射)。

暫無
暫無

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

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