如何在 ASP.NET Core Web API 中添加两个不同的标记
How add two different tokens in ASP.NET Core Web API
我需要我们控制器中的 Authorize 属性可以接受两种不同的令牌。
一个令牌由一个私有 ADFS 提供,另一个令牌由 AzureAd 提供。
几个 Ionic 客户端通过 ADFS,其他 Ionic 客户端通过 Azure AD
我的开发场景:ASP.NET Core 2.2 Web API
我的实际startup.cs(缩写)
ConfigureService()
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer((options =>
{
options.Audience = Configuration["Adfs:Audience"];
options.Authority = Configuration["Adfs:Issuer"];
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false
};
}));
}
我需要使用 AzureAD 进行其他身份验证。怎么样?
Startup.cs的Configure
方法
Configure(…)
{
app.UseAuthentication()
}
使用此代码,只能访问 ADFS 令牌和此用户,才能从控制器获取结果。但是,AzureAD 用户无法获得访问权限
我不知道如何为双令牌授权制作此代码,如果一个令牌来自 ADFS 或其他令牌来自 AzureAD,我们的控制器可以响应
您可以使用不同的模式名称设置多个 JWT Bearer Authentication :
services.AddAuthentication()
.AddJwtBearer("ADFS",options =>
{
options.Audience = Configuration["Adfs:Audience"];
options.Authority = Configuration["Adfs:Issuer"];
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false
};
})
.AddJwtBearer("AAD", options =>
{
//AAD jwt validation configuration
});
如果你想让你的 controller/action 接受两个 jwt 令牌,来自 AAD
或 ADFS
的令牌可以访问你的 controller/action ,你可以做一个让 AAD
和 ADFS
身份验证方案都尝试对请求进行身份验证的策略:
services
.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("AAD", "ADFS")
.Build();
});
此外,如果您想知道令牌来自哪个架构,您可以检查用户身份中的特定声明,或者直接将身份验证架构值添加到事件中的用户声明中:
options.Events = new Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerEvents
{
OnTokenValidated = (context) =>
{
var claimsIdentity = (ClaimsIdentity)context.Principal.Identity;
//add your custom claims here
claimsIdentity.AddClaim(new Claim("schema", "AAD"));
return Task.FromResult(0);
}
};
认证后开始行动:
var result = User.Claims.Where(c=>c.Type=="schema").FirstOrDefault().Value;
我需要我们控制器中的 Authorize 属性可以接受两种不同的令牌。
一个令牌由一个私有 ADFS 提供,另一个令牌由 AzureAd 提供。
几个 Ionic 客户端通过 ADFS,其他 Ionic 客户端通过 Azure AD
我的开发场景:ASP.NET Core 2.2 Web API
我的实际startup.cs(缩写)
ConfigureService()
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer((options =>
{
options.Audience = Configuration["Adfs:Audience"];
options.Authority = Configuration["Adfs:Issuer"];
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false
};
}));
}
我需要使用 AzureAD 进行其他身份验证。怎么样?
Startup.cs的Configure
方法
Configure(…)
{
app.UseAuthentication()
}
使用此代码,只能访问 ADFS 令牌和此用户,才能从控制器获取结果。但是,AzureAD 用户无法获得访问权限
我不知道如何为双令牌授权制作此代码,如果一个令牌来自 ADFS 或其他令牌来自 AzureAD,我们的控制器可以响应
您可以使用不同的模式名称设置多个 JWT Bearer Authentication :
services.AddAuthentication()
.AddJwtBearer("ADFS",options =>
{
options.Audience = Configuration["Adfs:Audience"];
options.Authority = Configuration["Adfs:Issuer"];
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false
};
})
.AddJwtBearer("AAD", options =>
{
//AAD jwt validation configuration
});
如果你想让你的 controller/action 接受两个 jwt 令牌,来自 AAD
或 ADFS
的令牌可以访问你的 controller/action ,你可以做一个让 AAD
和 ADFS
身份验证方案都尝试对请求进行身份验证的策略:
services
.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("AAD", "ADFS")
.Build();
});
此外,如果您想知道令牌来自哪个架构,您可以检查用户身份中的特定声明,或者直接将身份验证架构值添加到事件中的用户声明中:
options.Events = new Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerEvents
{
OnTokenValidated = (context) =>
{
var claimsIdentity = (ClaimsIdentity)context.Principal.Identity;
//add your custom claims here
claimsIdentity.AddClaim(new Claim("schema", "AAD"));
return Task.FromResult(0);
}
};
认证后开始行动:
var result = User.Claims.Where(c=>c.Type=="schema").FirstOrDefault().Value;