首页 > 解决方案 > 使用 Azure AD 保护 ASP.NET Core Web API

问题描述

我正在尝试启动一个使用 Azure AD 进行身份验证的新项目。它的设置使我在前端有一个 SPA,它从我正在创建的 ASP.NET 核心 Web API 获取信息。我在获取前端令牌以在 API 中进行授权时遇到问题。每次我向 API 发送请求时,我都会收到错误:Microsoft.IdentityModel.Tokens.SecurityTokenInvalidAudienceException: IDX10231: Audience validation failed.

我已将项目设置如下。

在 Azure AD 中,我设置了两个应用程序:一个用于前端,一个用于 API。API 应用程序有一个公开的 API,称为access_as_user. 然后前端应用程序可以访问它。我还为两者设置了客户端机密,并为前端添加了重定向 URL。

在我正在使用的 ASP.NET 核心 API 中,我正在使用Microsoft.Identity.Web和调用它,如下所示:

// startup.cs

...
public void ConfigureServices(IServiceCollection services)
  {
    ...
    services.AddProtectedWebApi(Configuration, subscribeToJwtBearerMiddlewareDiagnosticsEvents: true);
    ...
  }
...

在我的配置中,值如下:

"AzureAD": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "mydomain.onmicrosoft.com",
    "TenantId": "*MY TENANT ID*",
    "ClientId": "*Client ID of API",
    "ClientSecret": "Client Secret for API",
    "Audience": "Client ID of Front End"
}

要获得身份验证,我按照本教程 ->此处<- 设置 PostMan 以使用 OAuth 2.0 并自动为我获取令牌。魔法发生在本教程第 3 步的末尾。

任何帮助将不胜感激。

编辑:按照 alphaz18 建议的教程后,我发现了我的问题。我忘记ConfigureStartup.cs.

            app.UseRouting();
            app.UseAuthentication(); // This line was missing.
            app.UseAuthorization();

标签: asp.netazure.net-coreazure-active-directory

解决方案


我强烈建议您首先遵循 Microsoft 示例教程,因为它们都在工作。它们为您提供了使这些示例正常工作的所有步骤,是一个很好的起点: https ://github.com/Azure-Samples/ms-identity-javascript-angular-spa-aspnetcore-webapi

在你发布的那个教程中,我也没有看到任何关于观众的信息。那么你是从哪里得到的呢?


推荐阅读