You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在现有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 应用代码修改

  1. 安装必要NuGet包
    在NuGet包管理器控制台执行以下命令:

    Install-Package Microsoft.Owin.Security.OpenIdConnect
    Install-Package Microsoft.Owin.Security.Cookies
    Install-Package Microsoft.Owin.Host.SystemWeb
    
  2. 添加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为你的应用实际命名空间。

  3. 更新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:58:17