web-dev-qa-db-ja.com

Azure ADで保護されたAzure Functions-ネイティブアプリから呼び出すときにHTTP 401を取得する

私の目標は、Azure ADを使用してAzure Functionsを保護し、WPFアプリケーションからそれらを呼び出すことです。

次の定義のAzure関数があります。

public IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
        HttpRequest req,
        ILogger log,
        ExecutionContext context,
        ClaimsPrincipal claimsPrincipal)

Azure ADアプリを登録し、ネイティブアプリ認証の設定を構成しました。

Azure AD App Registration Settings

「Expose an API」bladd Expose an API

API権限も追加しました

API Permission

アプリを認証/承認ブレードのAzure Functionsアプリに関連付けました。

Azure Functions Authorization Settings

このようなAzure ADからWPFアプリでトークンを取得しています(Microsoft.Identity.Clientライブラリを使用)

            string applicationID = "***"; // My AppID Guid
            PublicClientApp = PublicClientApplicationBuilder.Create(applicationID)
                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
                .Build();

            var listScopes = new List<string>
            {
                //"user.read" - Removed based on @tony-yu recommendation
                $"api://{applicationID}/MyScope"
            };

            var authResult = await PublicClientApp.AcquireTokenInteractive(listScopes)
                                      .ExecuteAsync();

            var myToken = authResult.AccessToken;

私は問題なく認証でき、トークンを正常に取得していますが、関数を呼び出してAuthorizationヘッダー(Authorization = Bearer ****)にトークンを提供すると、次のようになります。

401-このディレクトリまたはページを表示する権限がありません。

これが私がそれをどのように呼ぶかです(Postman):

enter image description here

呼び出しが戻ったときのWWW-Authenticateヘッダーの内容は次のとおりです

www-authentication

取得したトークンを確認すると合法のようです

Token

私が間違っていることは何か考えていますか?

4
alexbf

だから私は最終的にこれのおかげでそれを機能させました SO記事 ここで ambrose-leung

0
alexbf

スコープが正しくありません。広告で保護されている関数にアクセスしたいので、使用する必要があります

var listScopes = new List<string>
            {
                "{applicationID}/.default"
            };

代わりに。

user.readは、Microsoft Graph APIの権限です。

0
Tony