簡體   English   中英

用於調用 MS Graph 的守護程序應用程序的 OnBehalfOfProfider 工作示例

[英]working example of OnBehalfOfProfider for a daemon app calling MS Graph

我很難找到適合這種情況的工作示例:

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithRedirectUri(redirectUri)
.WithClientSecret(clientSecret)
.Build();

OnBehalfOfProvider authProvider = new OnBehalfOfProvider(confidentialClientApplication, scopes);

我面臨的問題: 1. 我從哪個包中獲得 OnBehalfOfProfider? 2. 假設我必須獲得 AAD 用戶的訪問令牌,而無需用戶實際登錄(它是一個守護程序應用程序) - 如何構建 UserAssertion 實例?

這里的信息基於兩個來源:MSDN 'on behlaf of provider' https://docs.microsoft.com/en-us/graph/sdks/choose-authentication-providers?tabs=CS#OnBehalfOfProvider和 github 的'how to呼叫 OBO' https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/on-behalf-of

感謝藝術

當您的 API 接收包含用戶信息的訪問令牌,並且您希望以該用戶身份調用另一個 API 時,將使用代表流。 這聽起來不像你在這里的場景。

這聽起來更像是一種無人值守的后台訪問場景。 基本上有兩種選擇:

  1. 使用刷新令牌流
  2. 使用客戶端憑據流
  3. 使用 ROPC 流程

第一種方法更復雜,但推薦用於非關鍵流程。 MSAL 確實簡化了很多。 它的工作方式:

  1. 用戶使用例如授權代碼流向您的應用程序進行身份驗證
  2. MSAL 將刷新令牌存儲在一個好的令牌緩存中(數據庫/Azure Key Vault 等),你需要配置這個
  3. 您的后台處理器使用相同的令牌緩存,允許它使用刷新令牌來獲取新令牌

這種方法的缺點是它有點復雜,並且刷新令牌可能會過期,需要用戶重新進行身份驗證。

第二種方法更簡單,但需要使用應用程序權限而不是委派權限。 使用客戶端憑據,您的應用程序需要自己訪問所有數據,而無需任何用戶。 因此,這需要大量訪問並依賴於支持此方法的 API。 但它簡單可靠。

第三種方法是我不推薦的方法。 它要求您使用用戶的用戶名和密碼為用戶獲取令牌。 您不僅需要存儲用戶的密碼,而且如果用戶啟用了多重身份驗證、是訪客用戶等,則它根本不起作用。

暫無
暫無

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

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