.NET 6:默认Cookie认证下配置特定控制器的Azure AD托管身份权限
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
相关产品推荐
相关产品推荐

