[英]How can i use MSAL to authenticate when the app is in Azure?
我在 Azure 中有一個 Web 應用程序,用戶通過瀏覽器中的鏈接(例如 https://<SITE_NAME>.azurewebsites.net)進行連接。
我正在考慮使用 Graph API,並在 Azure 中的應用程序上實現如下
string clientId = "<CLIENT_ID>";
string clientSecret = "<CLIENT_SECRET>";
var app = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithClientSecret(clientSecret)
.WithRedirectUri("http://localhost")
.Build();
string[] scopes = new string[]
{
"https://graph.microsoft.com/user.read"
};
var result = await app.AcquireTokenInteractive(scopes)
.ExecuteAsync();
//此時如果成功登錄,用戶將獲得一個訪問令牌,他們可以用來進行其他api調用。
如果我的應用程序托管在 Azure 中,AcquireTokenInteractive 行將彈出“登錄到您的帳戶”Microsoft 窗口,並且該窗口將在 Azure 服務器上彈出,這是正確的還是我遺漏了什么?
如果上述內容不正確,我是否必須手動執行 1. 獲取授權令牌 2. 使用該授權令牌獲取訪問令牌?
如果這是必需的方式,是否有示例應用程序顯示 c# 中所需的步驟?
是的,它是正確的,行 AcquireTokenInteractive 將彈出“登錄您的帳戶”,AcquireTokenInteractive 方法將獲取訪問令牌,MSAL 將此令牌保存在其令牌緩存中。 Azure 服務器上將彈出 Microsoft 窗口。
當您使用適用於 .NET 的 Microsoft 身份驗證庫 (MSAL.NET) 獲取訪問令牌時,該令牌將被緩存。
當應用程序需要令牌時,它應該首先調用 AcquireTokenSilent 方法來驗證緩存中是否存在可接受的令牌。
在許多情況下,可以根據緩存中的令牌獲取具有更多范圍的另一個令牌。
也可以在令牌即將到期時刷新令牌(因為令牌緩存還包含刷新令牌)。
推薦的模式是首先調用 AcquireTokenSilent 方法。 如果 AcquireTokenSilent 失敗,則使用其他方法獲取令牌。
您可以參考以下鏈接了解更多信息:
https://github.com/Azure-Samples/ms-identity-aspnet-webapi-onbehalfof
https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-net-acquire-token-silently
但是,如果您想手動獲取令牌,以下代碼顯示了使用Microsoft.Identity.Web在家庭控制器中執行此操作的示例。
它使用 REST API(而不是 Microsoft Graph SDK)調用 Microsoft Graph。
要獲取令牌以調用下游 API,您需要注入
ITokenAcquisition
服務通過在您的控制器的構造函數(或您的頁面構造函數,如果您使用 Blazor)中的依賴注入,
並且您在控制器操作中使用它,在守護程序場景中為用戶 ( GetAccessTokenForUserAsync
) 或應用程序本身 ( GetAccessTokenForAppAsync
) 獲取令牌。
控制器方法受[Authorize]
屬性保護,確保只有經過身份驗證的用戶才能使用 Web 應用程序。
您可以通過以下鏈接瀏覽示例應用程序:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.