【问题标题】:How to authenticate .net core web APIs using Azure AD by using office365如何使用 office365 使用 Azure AD 对 .net 核心 Web API 进行身份验证
【发布时间】:2021-02-18 07:10:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: azure-active-directory jwt azure-web-app-service asp.net-core-webapi


    【解决方案1】:

    请参考Quickstart: Protect an ASP.NET Core web API with Microsoft identity platform

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

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

    您可以使用 [授权] 属性。

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

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

    你可以在Scenario: Protected web API看到更多细节。

    如果您想从 Web 应用调用 API,可以参考Scenario: A web app that calls web APIs

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

    更新:

    我假设你已经在 Azure 门户上创建了两个 Azure AD 应用并配置了它们之间的权限。 (如果没有,请参考Register the service app (TodoListAPI)Register the client app (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。

    【讨论】:

    • 你能解释一下如何在邮递员中测试api吗? JWT 是如何创建的,因为我在 startup.cs 中配置了 JWT。
    • @RahulDev 你创建了这两个 Azure AD 应用了吗?
    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2020-03-19
    相关资源
    最近更新 更多