首页 > 解决方案 > 如何使用 office365 使用 Azure AD 对 .net 核心 Web API 进行身份验证

问题描述

我将 .net core 3.1 web api 应用程序部署到 Azure App Service。我想使用 Azure Active Directory 为 API 设置身份验证,用户通过他们的 office 365 帐户登录。

架构就像 - 我已经准备好我的 Office 365 帐户。我向 Azure AD 请求令牌。使用 JWT,我从 azure AD 获得,我应该能够调用部署在应用服务中的 Web api 应用程序中的所有 API 端点。

您能否解释一下 azure 门户中需要完成的所有配置以及 startup.cs 文件中的代码更改。

标签: azure-active-directoryjwtazure-web-app-serviceasp.net-core-webapi

解决方案


请参阅快速入门:使用 Microsoft 标识平台保护 ASP.NET Core Web API

Microsoft.AspNetCore.Authentication 中间件使用在宿主进程初始化时执行的 Startup 类。在其 ConfigureServices 方法中,调用了 Microsoft.Identity.Web 提供的 AddMicrosoftIdentityWebApi 扩展方法。

public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApi(Configuration, "AzureAd");
    }

您可以使用 [Authorize] 属性保护控制器或控制器方法。

namespace webapi.Controllers
{
    [Authorize]
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase

部署到 Azure 应用服务不需要更多不同的配置。只需在调用时修改真实的 API 端点。

您可以从Scenario: Protected web API中查看更多详细信息。

如果您想从 Web 应用调用 API,您可以参考场景:调用 Web API 的 Web 应用

请记住,您需要注册两个 Azure AD 应用程序,一个用于客户端应用程序(前端),另一个用于 API 应用程序(后端)。在 API 应用程序中,您需要公开 API。然后您需要配置客户端应用程序。将 API 应用程序公开的权限(范围)添加到客户端应用程序。这些都在上面的链接中提到。

更新:

我假设你已经在 Azure 门户上创建了两个 Azure AD 应用程序并配置了它们之间的权限。(如果还没有,请参考注册服务应用(TodoListAPI)注册客户端应用(TodoListSPA)

然后你可以像这样在 Postman 中测试你的 API:

在此处输入图像描述

在此处输入图像描述

在第二个屏幕截图中:

授权网址:https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize

访问令牌网址:https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token

客户端 ID 和客户端密码来自代表客户端应用 (TodoListSPA) 的 Azure AD 应用。

Scope 是代表服务应用程序 (TodoListAPI) 的 Azure AD 应用程序公开的应用程序 id uri。


推荐阅读