65.9K
CodeProject 正在变化。 阅读更多。
Home

Azure AD 与 ASP.NET Core 2.0

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2018年5月19日

CPOL

3分钟阅读

viewsIcon

8522

如何在 ASP.NET Core 2.0 中实现 Azure AD 身份验证。继续阅读

问题

如何在 ASP.NET Core 2.0 中实现 Azure AD 身份验证。

解决方案

在之前的文章中,我们已经看到了如何使用以下方式保护我们的应用程序:

在本篇文章和下一篇文章中,我将演示如何使用 Azure AD 将身份和访问管理委托给 Azure,从而简化我们的应用程序。

配置 Azure AD

创建 Azure 订阅(免费开始,给你积分玩)。

创建新资源并搜索 'azure active directory'

创建新实例

输入详细信息,包括唯一的 '初始域名',这将成为应用程序中使用的租户名称,例如,在下面,租户名称将是 fiverad.onmicrosoft.com

创建目录后,我们需要注册我们的应用程序

输入应用程序的详细信息,包括应用程序主页/登录页面的 URL

创建应用程序后,您将在列表中看到 '应用程序 ID'。 这将在我们的应用程序中稍后用作 '客户端 ID'

单击应用程序和 '回复 URL,输入 Azure AD 在身份验证后将用户重定向到的 URL (https://:44308/security/signin-callback)

接下来,我们将在 Azure AD 中创建一个用户

请注意,用户名基于我们的目录域名,即 @fiverad.onmicrosoft.com 也要记下临时密码,您需要在首次登录时更改它

到目前为止,您已经

  1. 创建了 Azure AD
  2. 注册了您的应用程序
  3. 添加了一个用户

接下来,我们将设置我们的应用程序并使用 Azure AD 对用户进行身份验证。

配置应用程序

创建一个空项目并更新 Startup 以配置 MVC 和身份验证的服务和中间件

public class Startup
    {
        private readonly string TenantName = ""; // aka 'Initial Domain Name' in Azure
        private readonly string ClientId = ""; // aka 'Application Id' in Azure

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = 
                   CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = 
                   CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = 
                   OpenIdConnectDefaults.AuthenticationScheme;
            }).AddOpenIdConnect(options =>
            {
                options.Authority = "https://login.microsoftonline.com/" + 
                                        this.TenantName;
                options.ClientId = this.ClientId;
                options.ResponseType = OpenIdConnectResponseType.IdToken;
                options.CallbackPath = "/security/signin-callback";
                options.SignedOutRedirectUri = "https://:44308/";
            }).AddCookie();
            
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseAuthentication();
            app.UseMvcWithDefaultRoute();
        }
    }

在这里,我们使用以下方式设置 Open ID Connect 身份验证中间件服务:

  • Authority:我们设置为身份验证服务器的 Azure AD 租户的路径
  • ClientId:Azure AD 为我们的应用程序提供的应用程序标识符
  • ResponseType:确定使用的授权流程和从服务器返回的参数的值。 我们目前只对授权令牌感兴趣。
  • CallbackPath:服务器在身份验证后将重定向的路径。 我们不需要在我们的应用程序中创建这个,中间件会处理它。
  • SignedOutRedirectUri:服务器在注销后将重定向的路径。 例如,这是我们应用程序主页的路径。

此外,在配置身份验证中间件时,我们已将 Open ID Connect 指定为挑战方案。 这是 ASP.NET Core 将用于尚未登录的用户的中间件。

登录后,我们希望将其身份存储在 cookie 中,而不是在每次请求时都重定向到身份验证服务器。 出于这个原因,我们添加了 cookie 身份验证中间件,并将其用作默认的登录方案。 如果 cookie 丢失,将“挑战”用户的身份。

添加一个控制器以实现登录/注销操作

public class SecurityController : Controller
    {
        public IActionResult Login()
        {
            return Challenge(new AuthenticationProperties { RedirectUri = "/" });
        }

        [HttpPost]
        public async Task Logout()
        {
            await HttpContext.SignOutAsync(
              CookieAuthenticationDefaults.AuthenticationScheme);
            await HttpContext.SignOutAsync(
              OpenIdConnectDefaults.AuthenticationScheme);
        }
    }

注销时,从身份验证服务器 (Azure AD) 签出也很重要,并同时通过从 cookie 身份验证方案签出来删除 cookie。

使用 [Authorize] 属性保护控制器(或其操作)

[Authorize]
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }

运行应用程序,您将被重定向到 Azure 进行身份验证。

© . All rights reserved.