Warm tip: This article is reproduced from serverfault.com, please click

c#-如何验证Azure AD Access的appid

(c# - How to Validate appid of the Azure AD Access)

发布于 2020-11-04 09:53:40

我们有一个执行JWT令牌身份验证的.NET Core应用程序。此应用程序已在Azure AD中注册,客户端ID为abcde,API范围为api://abcde我们的租户还注册了其他应用程序,其中一个客户端ID为fghij我注意到的是,如果我将此客户端ID与它的密码和API范围一起使用api://abcde,则能够生成访问令牌并在此范围内访问API。

services.AddAuthentication(options =>
{
    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
    options.Authority = $"{ Configuration.GetValue<string>("AzureAD:Instance") }/{ Configuration.GetValue<string>("AzureAD:TenantId") }/";
    options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        ValidAudience = Configuration.GetValue<string>("AzureAD:Audience"),
        ValidIssuer = $"https://sts.windows.net/{ Configuration.GetValue<string>("AzureAD:TenantId") }"
    };
});

我想到的解决方案是验证访问令牌中的appid字段。我怎样才能做到这一点?基本上,我想确保只有客户端IDabcde可以请求作用域的访问令牌api://abcde

"aio": "abcde=",
"appid": "abcde", //client id of the application in Azure AD
"appidacr": "1",
Questioner
Josh Monreal
Viewed
0
Szymon Tomczyk 2020-12-03 23:04:04

你可以更改默认的授权策略以验证appid声明。开箱即用的默认策略是:

new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .Build();

你可以将其更改为:

    builder.Services.AddAuthorization(options =>
    {
        options.DefaultPolicy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .RequireClaim("appid", "allowedApp1", "allowedApp2")
            .Build();
    });

请参阅参考以在ASP.NET Core 3.x中使用DefaultPolicy和FallbackPolicy设置全局授权策略。