如何在现有IIS托管本地系统中集成Azure AD OpenID Connect认证
为IIS托管的ASP.NET (.NET Framework 4.8) 应用添加Azure AD OpenID Connect认证步骤
一、Azure AD 租户端配置
- 在Azure门户进入Azure Active Directory,左侧菜单选择“应用注册”,点击“新注册”:
- 名称填你的应用标识,支持账户类型选“仅限此组织目录中的账户”(适配内部系统)
- 重定向URI选Web类型,填入应用的回调地址(比如
https://your-internal-app.com/signin-oidc),完成注册
- 记录应用的客户端ID(在“概述”页面)和租户ID(同样在“概述”的“目录(租户)ID”)
- 进入“证书和密码”,点击“新建客户端密码”,设置过期时间后保存生成的密码值(只显示一次,务必记录)
- 进入“API权限”,点击“添加权限”→选择“Microsoft Graph”→“委托权限”,添加
User.Read权限,然后点击“授予管理员同意”(确保内部用户能正常授权)
二、ASP.NET 应用代码修改
安装必要NuGet包
在NuGet包管理器控制台执行以下命令:Install-Package Microsoft.Owin.Security.OpenIdConnect Install-Package Microsoft.Owin.Security.Cookies Install-Package Microsoft.Owin.Host.SystemWeb添加Owin启动类
如果应用没有Startup类,新建一个:using Microsoft.Owin; using Microsoft.Owin.Security.Cookies; using Microsoft.Owin.Security.OpenIdConnect; using Owin; using System.Configuration; using System.Threading.Tasks; [assembly: OwinStartup(typeof(YourAppNamespace.Startup))] namespace YourAppNamespace { public class Startup { public void Configuration(IAppBuilder app) { // 设置Cookie作为默认的登录认证类型 app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); app.UseCookieAuthentication(new CookieAuthenticationOptions()); // 配置OpenID Connect认证 app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions { ClientId = ConfigurationManager.AppSettings["AzureAD:ClientId"], Authority = $"https://login.microsoftonline.com/{ConfigurationManager.AppSettings["AzureAD:TenantId"]}/v2.0", RedirectUri = ConfigurationManager.AppSettings["AzureAD:RedirectUri"], ClientSecret = ConfigurationManager.AppSettings["AzureAD:ClientSecret"], ResponseType = "code id_token", // 同时获取授权码和ID令牌 Scope = "openid profile User.Read", TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters { ValidateIssuer = true, // 验证发行方,确保是你的Azure AD租户 }, Notifications = new OpenIdConnectAuthenticationNotifications { RedirectToIdentityProvider = n => { // 处理登出重定向 if (n.ProtocolMessage.RequestType == OpenIdConnectRequestType.Logout) { n.ProtocolMessage.PostLogoutRedirectUri = ConfigurationManager.AppSettings["AzureAD:PostLogoutRedirectUri"]; } return Task.FromResult(0); } } }); } } }替换
YourAppNamespace为你的应用实际命名空间。更新Web.config配置
在<appSettings>节点添加Azure AD参数:<appSettings> <!-- Azure AD认证参数 --> <add key="AzureAD:ClientId" value="你的客户端ID" /> <add key="AzureAD:TenantId" value="你的租户ID" /> <add key="AzureAD:RedirectUri" value="https://your-internal-app.com/signin-oidc" /> <add key="AzureAD:ClientSecret" value="你的客户端密码" /> <add key="AzureAD:PostLogoutRedirectUri" value="https://your-internal-app.com/" /> </appSettings>然后配置全局授权规则,拒绝匿名访问:
<system.web> <authorization> <deny users="?" /> <!-- 禁止未登录用户访问 --> </authorization> </system.web>如果有需要匿名访问的路径(比如静态资源、登录页),添加
<location>节点:<location path="public"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
三、IIS 服务器配置
- 安装URL重写模块:在Windows Server 2022的服务器管理器中,添加角色和功能,找到Web服务器(IIS)→Web服务器→应用开发,勾选“URL重写”,完成安装(Owin需要该模块处理回调路径)
- 启用HTTPS:在IIS站点绑定中添加SSL证书,确保应用通过HTTPS访问(Azure AD要求回调URI必须是HTTPS)
- 配置应用池:确保应用池的.NET CLR版本设置为
v4.0,托管管道模式选择“集成”模式
四、测试验证
- 访问应用地址,会自动跳转到Azure AD登录页面,使用内部AD账户登录后应能正常访问应用
- 添加登出功能:在页面中添加按钮,点击时执行以下代码完成登出:
HttpContext.GetOwinContext().Authentication.SignOut( CookieAuthenticationDefaults.AuthenticationType, OpenIdConnectAuthenticationDefaults.AuthenticationType); Response.Redirect("/");
内容的提问来源于stack exchange,提问作者Blue
相关产品推荐
相关产品推荐

