我正在开发一个包含用户接口和API的软件.对于身份验证和授权,我使用了.NET核心标识2.2!
我工作得很好。现在我有了两个不同要求的API函数: 1. API端点,它由用户接口(AJAX调用等)使用;2. API端点,可供其他软件使用
因此,我想使用两种不同的授权方法。对于第1点,我使用.NET核心身份授权和身份验证。关于第2点,我想用基本的8月
如何配置这些不同的授权方法。下面是一个示例代码:
BASIC AUTH代码
services.AddAuthentication("BasicAuth").AddScheme<AuthenticationSchemeOptions, BasicAuthHandler>("BasicAuth", null);
公共类BasicAuthHandler : AuthenticationHandler { IConfiguration _configuration;/构造器/公共BasicAuthHandler(IOptionsMonitor选项、ILoggerFactory记录器、UrlEncoder编码器、ISystemClock时钟、IConfiguration配置):基本(选项、记录器、编码器、时钟){ _configuration =配置;}/使用Basic Auth /->通过/受保护的覆盖异步任务HandleAuthenticateAsync() { if (!Request.Headers.ContainsKey("Authorization")) {返回AuthenticateResult.Fail(“丢失授权头”)检查配置的值;} try { var authHeader = Convert.FromBase64String(authHeader.Parameter);var credentialsByes = Encoding.UTF8.GetString(credentialsByes).Split(':');var configuredUserName = _configuration"BasicAuth:Username";var configuredPassword = _configuration"BasicAuth:Password";如果(configuredUserName.Equals(凭据)& configuredPassword.Equals(credentials1)) { var claims = new[] {新索赔(ClaimTypes.Name,凭据) };var identity =新ClaimsIdentity(索赔,Scheme.Name);var主体=新ClaimsPrincipal(标识);var票证=新AuthenticationTicket(主体,Scheme.Name);返回AuthenticateResult.Success(票证);}AuthenticateResult.Success{返回AuthenticateResult.Fail(“无效凭据”);} catch {返回AuthenticateResult.Fail(“无效授权头”);})
Produces("application/json")Route("api/v{version:apiVersion}/controller")]授权公共类MasterDataController : ControllerBase {.}
授权注释每次都使用Authorize核心标识。
另一种情况是使用.NET核心标识授权用于UI-APIs。
[ApiController]
[ApiVersion("1.0", Deprecated = false)]
[Produces("application/json")]
[Route("api/v{version:apiVersion}/[controller]")]
[Authorize(Roles = "SuperUser,PlantAdministrator,EndUser")]
public class UploadController : ControllerBase
{...}
--这个很好--但是我想用一个组合.
发布于 2020-03-06 09:58:20
我找到了解决办法。您可以将参数添加到授权注释中,如下所示:
[ApiController]
[ApiVersion("1.0", Deprecated = false)]
[Produces("application/json")]
[Route("api/v{version:apiVersion}/[controller]")]
[Authorize(ActiveAuthenticationSchemes = "BasicAuth")]
public class MasterDataController : ControllerBase
{...}
如果您将ActiveAuthenticationSchemes设置为Basic,它将查找兼容的AuthenticationHandler!
https://stackoverflow.com/questions/60561496
复制相似问题