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

.NET 6:默认Cookie认证下配置特定控制器的Azure AD托管身份权限

实现Cookie认证与托管身份认证共存的方案

1. 添加Azure AD托管身份认证方案

在现有认证配置后,新增针对Azure AD托管身份的JWT认证方案,用于验证Logic App的系统托管身份令牌:

.AddJwtBearer("AzureADManagedIdentity", options =>
{
    // 替换为你的Azure租户ID
    options.Authority = "https://login.microsoftonline.com/你的租户ID";
    // 替换为你的API的应用ID URI或客户端ID(Logic App调用时会将此作为audience)
    options.Audience = "你的API应用ID";
    
    // 可选:验证令牌颁发者,确保来自Azure AD
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidIssuer = "https://sts.windows.net/你的租户ID/",
        ValidateLifetime = true,
        ValidateAudience = true
    };
})

2. 配置"ManagedApp"授权策略

添加授权策略,强制使用上述托管身份认证方案,还可额外限制特定Logic App的身份:

services.AddAuthorization(options =>
{
    options.AddPolicy("ManagedApp", policy =>
    {
        // 指定必须使用托管身份认证方案
        policy.AuthenticationSchemes.Add("AzureADManagedIdentity");
        policy.RequireAuthenticatedUser();
        
        // 可选:限制为指定Logic App的系统托管身份Object ID,替换为实际值
        policy.RequireClaim("oid", "你的Logic App托管身份Object ID");
    });
});

3. 保护新API控制器

在供Logic App调用的新API控制器/Action上直接添加特性,完全无需修改现有Cookie认证的控制器:

[ApiController]
[Route("api/logicapp")]
[Authorize(Policy = "ManagedApp")]
public class LogicAppApiController : ControllerBase
{
    [HttpPost]
    public IActionResult ProcessRequest()
    {
        // 处理Logic App的请求逻辑
        return Ok();
    }
}

完整的ConfigureServices核心代码

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(options =>
    {
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    })
        .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
        {
            options.LoginPath = "/signin";
            options.LogoutPath = "/signout";
            // 原有Cookie存储相关配置
        })
        // 新增托管身份认证配置
        .AddJwtBearer("AzureADManagedIdentity", options =>
        {
            options.Authority = "https://login.microsoftonline.com/你的租户ID";
            options.Audience = "你的API应用ID";
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidIssuer = "https://sts.windows.net/你的租户ID/",
                ValidateLifetime = true,
                ValidateAudience = true
            };
        });

    // 配置授权策略
    services.AddAuthorization(options =>
    {
        options.AddPolicy("ManagedApp", policy =>
        {
            policy.AuthenticationSchemes.Add("AzureADManagedIdentity");
            policy.RequireAuthenticatedUser();
            // 可选:限制特定Logic App身份
            policy.RequireClaim("oid", "你的Logic App托管身份Object ID");
        });
    });

    services.AddMvc();
}

关键说明

  • 现有Cookie认证的控制器不受任何影响,因为默认认证方案仍为Cookie,只有标注了[Authorize(Policy = "ManagedApp")]的控制器才会强制使用托管身份认证。
  • 代码中的租户ID、API应用ID、Logic App托管身份Object ID需要替换为Azure门户中对应的实际值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:36:18