Azure AD 与 ASP.NET Core 2.0





5.00/5 (1投票)
如何在 ASP.NET Core 2.0 中实现 Azure AD 身份验证。继续阅读
问题
如何在 ASP.NET Core 2.0 中实现 Azure AD 身份验证。
解决方案
在之前的文章中,我们已经看到了如何使用以下方式保护我们的应用程序:
- 使用 Cookie 身份验证自定义登录/注销页面
- JWT 来保护 Web 服务
- ASP.NET Identity 简化身份和访问管理
- IdentityServer4 将身份和访问管理委托给专用应用程序
在本篇文章和下一篇文章中,我将演示如何使用 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
也要记下临时密码,您需要在首次登录时更改它
到目前为止,您已经
- 创建了 Azure AD
- 注册了您的应用程序
- 添加了一个用户
接下来,我们将设置我们的应用程序并使用 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 进行身份验证。