如何将 Azure AD 和非 Azure AD 令牌添加到同一个 .NET Core Api
Posted
技术标签:
【中文标题】如何将 Azure AD 和非 Azure AD 令牌添加到同一个 .NET Core Api【英文标题】:How I can add both Azure AD and non Azure AD tokens to the same .NET Core Api 【发布时间】:2021-06-20 18:17:53 【问题描述】:想做这样的事情:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
options.TokenValidationParameters = new TokenValidationParameters()
ValidateAudience = false,
ValidateIssuer = false,
ValidateIssuerSigningKey = false,
ValidateLifetime = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("private_key"))
;
)
.AddMicrosoftIdentityWebApi(this.Configuration.GetSection("AzureAd"));
但它崩溃了。如果我为每个方案添加一个名称,则 [Authorize] 不起作用。
我怎样才能做这样的事情,并区分不同控制器上的 [Authorize] 方法用于一个或另一个?
谢谢
【问题讨论】:
你的问题解决了吗? 【参考方案1】:对于 AAD,请在控制器上使用 [Authorize] 对于非 AAD,我使用 [Authorize(AuthenticationSchemes = "Other"]
将“Other”方案名称添加到 .AddJwtBearer 中,如下所示。
编码愉快:)
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer("Other", options =>
options.TokenValidationParameters = new TokenValidationParameters()
ValidateAudience = false,
ValidateIssuer = false,
ValidateIssuerSigningKey = false,
ValidateLifetime = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("private_key"))
;
)
.AddMicrosoftIdentityWebApi(this.Configuration.GetSection("AzureAd"))
【讨论】:
【参考方案2】:仅添加配置策略所需的身份验证是不够的,因此两者都将得到验证(在official doc 中)
services.AddAuthorization(options =>
var defaultAuthorizationPolicyBuilder = new AuthorizationPolicyBuilder(
JwtBearerDefaults.AuthenticationScheme,
"AzureAD");
defaultAuthorizationPolicyBuilder =
defaultAuthorizationPolicyBuilder.RequireAuthenticatedUser();
options.DefaultPolicy = defaultAuthorizationPolicyBuilder.Build();
);
【讨论】:
以上是关于如何将 Azure AD 和非 Azure AD 令牌添加到同一个 .NET Core Api的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Postman 获取 Azure AD 刷新令牌?
Azure AD B2C 与企业 (Azure?) AD 帐户集成
Azure AD 与 Azure AD B2C 与 Azure AD B2B