部署Azure的.NET 4.8 ASP.NET MVC应用Azure AD认证实现步骤咨询
基于.NET 4.8的ASP.NET MVC应用集成Azure AD身份认证步骤
一、Azure门户端配置
- 注册Azure AD应用程序
- 登录Azure门户,搜索进入「Azure Active Directory」,找到「应用注册」模块,点击「新注册」
- 填写应用名称(比如你的MVC应用名),账户类型根据需求选择(推荐先选「仅限此组织目录中的账户」),重定向URI选择「Web」,填入部署后应用的根地址+
/signin-oidc(例:https://yourapp.azurewebsites.net/signin-oidc),完成注册 - 注册成功后,记录页面上的应用程序(客户端)ID和目录(租户)ID,后续代码要用到
- 创建客户端密钥
- 在刚注册的应用详情页,进入「证书和密码」,点击「新客户端密码」
- 填写密钥描述和过期时间,点击添加,生成后立刻复制密钥值(仅显示一次)并保存好
二、应用代码修改
- 安装必要NuGet包
在Visual Studio打开你的MVC项目,通过NuGet包管理器安装Microsoft.Owin.Security.OpenIdConnect和Microsoft.Owin.Security.Cookies两个包 - 添加Owin启动配置
如果项目没有Startup.cs,在根目录新建该文件,代码如下(替换YourMvcApp为你的项目命名空间):using Microsoft.Owin; using Owin; using Microsoft.Owin.Security.Cookies; using Microsoft.Owin.Security.OpenIdConnect; using System.Configuration; [assembly: OwinStartup(typeof(YourMvcApp.Startup))] namespace YourMvcApp { public class Startup { public void Configuration(IAppBuilder app) { app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); app.UseCookieAuthentication(new CookieAuthenticationOptions()); app.UseOpenIdConnectAuthentication( new OpenIdConnectAuthenticationOptions { ClientId = ConfigurationManager.AppSettings["AzureAd:ClientId"], Authority = $"https://login.microsoftonline.com/{ConfigurationManager.AppSettings["AzureAd:TenantId"]}", RedirectUri = ConfigurationManager.AppSettings["AzureAd:RedirectUri"], ClientSecret = ConfigurationManager.AppSettings["AzureAd:ClientSecret"], ResponseType = "code id_token", Scope = "openid profile email", TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters { ValidateIssuer = true, }, Notifications = new OpenIdConnectAuthenticationNotifications { AuthenticationFailed = context => { context.HandleResponse(); context.Response.Redirect("/Error?message=" + context.Exception.Message); return System.Threading.Tasks.Task.FromResult(0); } } }); } } } - 配置Web.config
在<appSettings>节点下添加Azure AD相关配置,填入之前记录的信息:<add key="AzureAd:ClientId" value="你的客户端ID" /> <add key="AzureAd:TenantId" value="你的租户ID" /> <add key="AzureAd:RedirectUri" value="你的重定向URI" /> <add key="AzureAd:ClientSecret" value="你的客户端密钥" /> - 设置授权与登录登出逻辑
- 在需要权限验证的控制器或Action上添加
[Authorize]特性,示例:[Authorize] public class HomeController : Controller { public ActionResult Index() { // 获取当前登录用户信息 var user = User.Identity; ViewBag.UserName = user.Name; ViewBag.UserEmail = user.FindFirst(System.Security.Claims.ClaimTypes.Email)?.Value; return View(); } } - 在视图中添加登录/登出入口:
@if (User.Identity.IsAuthenticated) { <p>欢迎, @User.Identity.Name!</p> @Html.ActionLink("登出", "SignOut", "Account") } else { @Html.ActionLink("登录", "SignIn", "Account") } - 创建Account控制器处理登录登出:
public class AccountController : Controller { public void SignIn() { if (!Request.IsAuthenticated) { HttpContext.GetOwinContext().Authentication.Challenge( new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType); } } public void SignOut() { HttpContext.GetOwinContext().Authentication.SignOut( CookieAuthenticationDefaults.AuthenticationType, OpenIdConnectAuthenticationDefaults.AuthenticationType); } }
- 在需要权限验证的控制器或Action上添加
- 部署到Azure App Service
将项目发布到Azure App Service,确保部署后的地址和之前配置的重定向URI一致;也可以在App Service的「配置」->「应用程序设置」中添加Azure AD相关配置,替换Web.config中的硬编码(更安全)
内容的提问来源于stack exchange,提问作者Faisal
相关产品推荐
相关产品推荐

