web-dev-qa-db-ja.com

Azure ActiveDirectoryを使用したAzureFunction認証

AzureFunctionsで認証を有効にしたかったのです。そこで、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}");

しかし、上記のコードは不正な呼び出しを引き起こしています。何が間違っているのかわかりません。

3
Vishal Sinha

Azure関数の認証レベルがanonymousまたはの場合、accesstokenを使用してAzure関数のAPIに直接アクセスできます。ファンクションキーも必要です。

私はあなたの言及した方法でアクセストークンを取得します。 Azureリソースポータル( https://resources.Azure.com/ )によると、デフォルトのallowedAudiencesは

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

だから私は許可されたaduiencesとしてhttps://{functionAppName}.azurewebsites.net/を追加します

enter image description here

次に、アクセストークンを直接使用できます。郵便配達員でテストします。

enter image description here

次の方法を使用して、簡単な認証トークンを取得することもできます。アクセストークンは、取得したトークンです。

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

enter image description here

その後、getトークンを使用してAzure関数APIにアクセスできます

enter image description here

:ヘッダーはx-zumo-auth:トークン

3
Tom Sun - MSFT

この問題に関しては、Azure関数を呼び出すためのクライアントアプリを作成する必要があります。詳細な手順は以下のとおりです。

  1. AzureFunction用にAzureADを構成します。 https://docs.Microsoft.com/en-us/Azure/azure-functions/functions-how-to-use-Azure-function-app-settings#auth を参照してください。

    私。トリガーの統合に移動し、認証レベルを匿名に設定します enter image description here

    ii。認証/承認に移動し、AzureADを構成します

    enter image description here

  2. AzureポータルのADにclentアプリケーションを登録します。詳細については、 https://docs.Microsoft.com/en-us/Azure/active-directory/develop/quickstart-v1-integrate-apps-with-Azure-ad を参照してください。

    a。 Azure Active Directoryを開き、[アプリの登録]をクリックして、[新しいアプリケーションの登録]を選択します。

    b。名前とリダイレクトURLを入力してください。何でも書くことができます。次に、作成ボタンをクリックします。

    c。設定->必要な権限->追加、ステップ1で使用するアプリケーションを選択します

    d。権限の選択->アプリケーションの権限->選択->完了->権限の付与->はい

    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>

enter image description hereenter image description hereenter image description here

1
Jim Xu