web-dev-qa-db-ja.com

Azure AD認証401エラー「オーディエンスは無効です」AddazureAdBearer .NET CORE Web API

私はAzure AD認証の簡単な例を作成しようとしています このサンプルを使用 私のクライアントがjQueryの場合は==。トークンが表示されている場合、オーディエンスに関する401のエラーが無効である理由はわかりません。オーディエンスがhttps://myportal.onmicrosoft.com/test_core_web_api_spaの場合は無効です。これはAzureのAPI定義と一致します。唯一の欠けたピースはuser_impersonationのカスタムスコープですが、MSAL clientApplication.acquireTokenSilent(tokenRequest2)を使用して呼び出しを行うと、トークンを取得すると、スコープはAPIの完全なURLとスコープの完全なURLと一致します。

const tokenRequest2 = {
    scopes: ["https://myportal.onmicrosoft.com/test_core_web_api_spa/user_impersonation"]
};

認証を確立するためのAPIでは、このコードを使用しています(私はこのメソッドを使用していません)

services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
   .AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

そしてAPIの構成

  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "myportal.onmicrosoft.com",
    "TenantId": "my-tenant-guid",
    "ClientId": "my-api-client-guid"
  },

私はAPIのさまざまな形式を示す多くの例に注目しました(私はこれらが古いバージョンであるとします)が、露出したAPIスコープはhttps://myportal.onmicrosoft.com/test_core_web_api_spa/user_impersonationとしてAzureにリストされています。また、Azure Dashboardを使用してクライアントのGUIDを追加して、この公開されたAPIスコープにアクセスします。

私が間違っていたアイデアはどんなアイデアですか?あるいは、MSAL、クライアントのjQuery、および単純な.NET CORE Web APIを使用していますか?私が見つけたすべての例として、別のクライアントまたは別の認証方法を使用しています。

Web APIアプリのAzureでAPI設定を表示するための更新。( - === - )「APIの公開」画面の設定を示すAzureからのイメージを追加しました。カスタムスコープuser_impersonationを追加し、クライアントを追加し、そのスコープへのアクセスを許可しました。ご覧のとおり、私のAzureサブスクリプションは他の人から見られたapi://guid形式を持っていません。そのapi://guid形式を使用しようとすると、エラーThe resource principal named api://guid was not found in the tenantが表示されます。

トークンの画像も追加しました。 audタグはazureの私のWeb APIアプリ名と一致します。そしてscp私が私のスコープ要求に添付されている範囲をリストします。他に何を試してもわかりません。

enter image description here

expose api settings for web api

9
pretzelb

問題はWeb APIの構成データでした。彼らがClientId彼らが本当に欲しいものを言うとき、 "APIの公開"オプション "Application ID URI"と表示されます。私がそこに置いていたことは、Web APIアプリケーション登録のGUIDがありました。以下はそれがどのように見えるべきかです。

  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "myportal.onmicrosoft.com",
    "TenantId": "mytenant-guid",
    "ClientId": "https://myportal.onmicrosoft.com/test_core_web_api_spa"
  },

API形式で注意してください。アプリケーションを直接登録すると、露出APIの形式がapi://app-guidになります。しかし、最初にVisual Studioを使用してアプリケーションを作成した場合、そのフォーマットはhttps:///myportal.onmicrosoft.com/project-name-in-visual-studioのようなものにデフォルトになります。

4
pretzelb

範囲は正しくありません、それがあなたがthe audience is invalidを手に入れた理由です。

スコープはapi://web_api_clientId/readのようなものであるべきです。

enter image description here

0
Tony Ju