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

.NET Classic MVC 5 Web应用API端点OAuth认证方案咨询

适配方案:.NET Framework Web应用同时支持MSAL与OAuth API认证

1. 保留现有MSAL认证(用于前端调试工具)

  • 维持原有MSAL配置不动,确保调试工具仍能通过MSAL获取令牌、访问应用内保留的功能页面。
  • 若原MSAL基于OWIN中间件实现,确保Microsoft.Identity.Web或Microsoft.Owin.Security.ActiveDirectory相关包版本兼容,无需改动核心认证逻辑。

2. 为新增API端点添加OAuth认证

基于OWIN中间件配置JWT Bearer认证

  • 先安装必要NuGet包:Microsoft.Owin.Security.Jwt、System.IdentityModel.Tokens.Jwt
  • 在OWIN Startup类中添加JWT Bearer认证配置,与MSAL共用同一Azure AD租户,示例代码:
using Microsoft.Owin;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Jwt;
using Owin;
using System.Configuration;
using System.IdentityModel.Tokens.Jwt;

[assembly: OwinStartup(typeof(YourAppNamespace.Startup))]
namespace YourAppNamespace
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // 保留原有MSAL对应的Cookie认证配置
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = "Cookies",
                // 原MSAL相关配置逻辑...
            });

            // 新增JWT Bearer认证用于API端点
            var issuer = ConfigurationManager.AppSettings["AADIssuer"];
            var audience = ConfigurationManager.AppSettings["APIAudience"];
            var tokenValidationParameters = new TokenValidationParameters
            {
                ValidIssuer = issuer,
                ValidAudience = audience,
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                IssuerSigningKeys = new JsonWebKeySet(ConfigurationManager.AppSettings["OpenIdConfigMetadata"]).GetSigningKeys()
            };

            app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
            {
                TokenValidationParameters = tokenValidationParameters,
                AuthenticationMode = AuthenticationMode.Active,
                Provider = new OAuthBearerAuthenticationProvider
                {
                    OnValidateIdentity = context =>
                    {
                        // 自定义身份校验逻辑,比如权限、角色检查
                        return Task.FromResult<object>(null);
                    }
                }
            });
        }
    }
}
  • 在Web.config中配置关键参数:
<appSettings>
  <add key="AADIssuer" value="https://login.microsoftonline.com/{你的租户ID}/v2.0" />
  <add key="APIAudience" value="{你的API客户端ID}" />
  <add key="OpenIdConfigMetadata" value="https://login.microsoftonline.com/{你的租户ID}/v2.0/.well-known/openid-configuration" />
</appSettings>

区分API与页面的认证策略

  • 新增的Web API控制器,使用[Authorize]属性指定Bearer认证方案:
[Authorize(AuthenticationSchemes = "Bearer")]
public class ApiController : System.Web.Http.ApiController
{
    // API端点业务逻辑...
}
  • 保留的页面继续使用原MSAL对应的Cookie认证,可通过[Authorize(AuthenticationSchemes = "Cookies")]明确指定,或保持原有默认配置。

3. 关键注意事项

  • Azure AD需完成对应配置:可注册同一应用的两种身份(或两个独立应用),一个用于MSAL前端调试(配置调试工具的重定向URI),一个用于API(设置正确的受众和权限范围)。
  • 令牌版本适配:若使用Azure AD v2.0端点,需注意JWT令牌的issuer、声明格式与v1.0的差异,对应调整配置参数。
  • 框架版本要求:.NET Framework需至少为4.6.1,以支持最新JWT验证库的兼容性。

内容的提问来源于stack exchange,提问作者Scuba Steve

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:22:49