簡體   English   中英

使用 Azure Active Directory 的 Azure Function 身份驗證

[英]Azure Function authentication using Azure Active Directory

我想在 Azure Functions 上啟用身份驗證。 因此,我決定使用 EasyAuth(平台功能下的身份驗證/授權鏈接)並成功配置身份驗證過程。

當我手動登錄到 Azure Function 終結點時,身份驗證工作。 但是當我嘗試以編程方式訪問 API 時,沒有任何手動用戶干預,我面臨身份驗證問題:

Status Code:401, Unauthorized

我使用以下代碼使用 clientID 和 clientSecret 從 AAD 獲取訪問令牌:

AuthenticationContext context = new AuthenticationContext("https://login.windows.net/<tenant-id>");
string key = "<client-secret>";
ClientCredential cc = new ClientCredential("<client-id>", key);
AuthenticationResult result = context.AcquireTokenAsync("https://<AzureFunctionAppName>.azurewebsites.net/", cc).Result;
return result.AccessToken;

然后我嘗試將在標頭中收到的訪問令牌發送到我的 API 的新請求:

var content = "{\"on\":true, \"sat\":254, \"bri\":254, \"hue\":10000}";
var AADToken = GetS2SAccessToken();
HttpClient Client = new HttpClient();
Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AADToken);
var foo = Client.PostAsync("https://<AzureFunctionAppName>.azurewebsites.net/.auth/login/aad", new StringContent(content.ToString())).Result;
Console.WriteLine($"result: {foo}");

但是上面的代碼導致了未經授權的調用。 我不確定我做錯了什么。

如果您的azure function 身份驗證級別是匿名的或者還需要function key ,我們可以使用accesstoken 直接訪問您的azure function api。

我用你提到的方式獲得了訪問令牌。 根據 Azure 資源門戶( https://resources.azure.com/ ),默認的 allowedAudiences 是

  "https://{functionAppName}.azurewebsites.net/.auth/login/aad/callback"

所以我添加了https://{functionAppName}.azurewebsites.net/作為允許的受眾

在此處輸入圖片說明

然后我可以直接使用訪問令牌。 我用郵遞員測試它。

在此處輸入圖片說明

我們也可以使用以下方式來獲取簡單的身份驗證令牌。 訪問令牌是您獲得的令牌。

Post https://xxx.azurewebsites.net/.auth/login/aad
Content-Type:application/json
{
    "access_token":"eyJ0eXAiOix...rtf2H7lyUL-g34HVw"
}

在此處輸入圖片說明

之后我們就可以使用get token訪問azure函數api

在此處輸入圖片說明

注意:標題是x-zumo-auth :令牌

關於這個問題,您需要創建一個客戶端應用程序來調用您的 Azure 函數。 詳細步驟如下。

  1. 為 Azure 函數配置 Azure AD。 請參閱https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings#auth

    一世。 轉到觸發器的集成,將授權級別設置為匿名在此處輸入圖片說明

    ii. 進入身份驗證/授權並配置 Azure AD

    在此處輸入圖片說明

  2. 在 azure 門戶上的 AD 中注冊客戶端應用程序。 有關更多詳細信息,請參閱https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v1-integrate-apps-with-azure-ad

    一種。 打開 Azure Active Directory 並單擊應用程序注冊,選擇新應用程序注冊。

    輸入您的姓名和重定向 URL,您可以寫任何內容。 然后點擊創建按鈕。

    C。 設置->所需權限->添加,選擇你在step1中使用的應用

    d. 選擇權限-> APPLICAION PERMISSIONS -> 選擇-> 完成-> 授予權限-> 是

    e. 創建一個密鑰並復制它

    F。 復制應用程序 ID

  3. 測試

獲取令牌:

METHOD: POST

Url : https://login.microsoftonline.com/your directory ID/oauth2/token 

HEADERS:  Content-Type : application/x-www-form-urlencoded

BODY:
grant_type+=client_credentials&resource+=”your Function APP ID”&client_id+++++=”the application that your register  id”&client_secret+=”the key you create”

測試功能:

METHOD: Get

Url : https://<Functionname>.azurewebsites.net/api/HttpTriggerCSharp1?name=azure

HEADERS:  Authorization : Bearer <access token>

在此處輸入圖片說明 在此處輸入圖片說明 在此處輸入圖片說明

暫無
暫無

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

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