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}");
しかし、上記のコードは不正な呼び出しを引き起こしています。何が間違っているのかわかりません。
Azure関数の認証レベルがanonymousまたはの場合、accesstokenを使用してAzure関数のAPIに直接アクセスできます。ファンクションキーも必要です。
私はあなたの言及した方法でアクセストークンを取得します。 Azureリソースポータル( https://resources.Azure.com/ )によると、デフォルトのallowedAudiencesは
"https://{functionAppName}.azurewebsites.net/.auth/login/aad/callback"
だから私は許可されたaduiencesとしてhttps://{functionAppName}.azurewebsites.net/
を追加します
次に、アクセストークンを直接使用できます。郵便配達員でテストします。
次の方法を使用して、簡単な認証トークンを取得することもできます。アクセストークンは、取得したトークンです。
Post https://xxx.azurewebsites.net/.auth/login/aad
Content-Type:application/json
{
"access_token":"eyJ0eXAiOix...rtf2H7lyUL-g34HVw"
}
その後、getトークンを使用してAzure関数APIにアクセスできます
注:ヘッダーはx-zumo-auth:トークン
この問題に関しては、Azure関数を呼び出すためのクライアントアプリを作成する必要があります。詳細な手順は以下のとおりです。
AzureFunction用にAzureADを構成します。 https://docs.Microsoft.com/en-us/Azure/azure-functions/functions-how-to-use-Azure-function-app-settings#auth を参照してください。
ii。認証/承認に移動し、AzureADを構成します
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をコピーします
テスト
トークンを取得する:
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>