azure-active-directory - 如何使用 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 文件中的代码更改。
解决方案
请参阅快速入门:使用 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。
推荐阅读
- angular - 在离开网页之前警告用户未保存的更改角度
- c# - 我的 ASP.NET MVC 应用程序中的 Quartz 调度程序仅在 IIS 服务器上刷新网页/应用程序后才执行作业
- c# - 如何在 Xamarin Form 项目中获取 XAML 文件中描述的控件?
- regex - 匹配一行中的第 n 个单词
- sql - 有没有办法让这个查询成为一个循环或更有效?
- python - 使用分类变量运行 F 检验
- python - 将 pageToken 与 Google Analytics Reporting API v4 和 Python 结合使用
- verilog - 总是敏感列表中的异或。Verilog
- react-native - 执行失败:react-native-fbsdk:compileReleaseJavaWithJavac'
- python - Python Bokeh - HoverTool:图形的坐标而不是数据点