web-dev-qa-db-ja.com

ベアラートークンを使用すると、AD authを使用するAzure関数で401 Unauthorizedが発生する

Azure AD Authをセットアップした非常にシンプルなAzure関数がC#にあります。 Express設定を使用して、関数構成でアプリ登録を作成しました。

public static class IsAuthenticated
{
    [FunctionName("IsAuthenticated")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "options", Route = null)]
        HttpRequest req,
        ILogger log)
    {
        return new OkObjectResult("You are " + req.HttpContext.User.Identity.Name);
    }
}

ブラウザで関数にアクセスすると、すべてが期待どおりに機能します(ログインしていない場合は、ログインしてAPIにリダイレクトする必要があります)。しかし、ベアラートークンが必要な場所で関数にアクセスしようとすると、401 Unauthorizedエラー。さらに奇妙なことに、Azureポータルで関数を実行することもできません。

しかし、トークンは問題なく取得され、リクエストに追加されました。

enter image description here

この問題を解決するためにいくつかのことを試しました。最初に、それはCORSの問題であると考え(私はいくつかの問題も抱えていたため)、CORSを*を受け入れるように設定しましたが、何も変更されませんでした。

次に、APIログインエンドポイントをリダイレクトに追加し、暗黙的な許可を設定してアクセストークンも受け入れるようにしましたが、まだ機能しません。

enter image description here

私が見落としたことはありますか?アプリ登録のエクスプレス構成は、Azureの関数で機能しないのですか?

編集:

@ thomas-schreiter によって示唆されているように、リダイレクトに関数アプリへのURLを入れても何も変わりません(スクリーンショットで設定を試してみましたが、それぞれの値を独自のものに置いています)。

enter image description here

編集2:

また、手動でベアラートークンを取得しようとしました Postmanを使用して ですが、APIを呼び出すと、依然として401に遭遇します。

13
Staeff

私が今考えることができる唯一のことは許可された聴衆です。

Active Directoryの設定に移動し、[詳細]をクリックします。 Allowed Token Audienceの下に、正確な関数URLを追加します。それはすでにコールバックURLで存在している可能性がありますが、図に示されているように、コールバックのない関数ベースURLのみに置き換えるだけです。

[ok]を押すときに、認証/承認の設定を保存して有効にし、1分程度後にもう一度試してください。 PostManを使用してテストし、無記名トークンを渡すと、動作します!

enter image description here

1
Imran Arshad