首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET核心2.2标识+ WebAPI的基本接口

.NET核心2.2标识+ WebAPI的基本接口
EN

Stack Overflow用户
提问于 2020-03-06 09:49:40
回答 1查看 358关注 0票数 0

我正在开发一个包含用户接口和API的软件.对于身份验证和授权,我使用了.NET核心标识2.2!

我工作得很好。现在我有了两个不同要求的API函数: 1. API端点,它由用户接口(AJAX调用等)使用;2. API端点,可供其他软件使用

因此,我想使用两种不同的授权方法。对于第1点,我使用.NET核心身份授权和身份验证。关于第2点,我想用基本的8月

如何配置这些不同的授权方法。下面是一个示例代码:

BASIC AUTH代码

services.AddAuthentication("BasicAuth").AddScheme<AuthenticationSchemeOptions, BasicAuthHandler>("BasicAuth", null);

  • Build Basic Auth Handler中的
  1. 尝试添加对BasuicAuth的服务支持

公共类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(“无效授权头”);})

  • 尝试将身份验证基本-8月添加到控制器

Produces("application/json")Route("api/v{version:apiVersion}/controller")]授权公共类MasterDataController : ControllerBase {.}

授权注释每次都使用Authorize核心标识

另一种情况是使用.NET核心标识授权用于UI-APIs。

代码语言:javascript
运行
复制
[ApiController]
[ApiVersion("1.0", Deprecated = false)]
[Produces("application/json")]
[Route("api/v{version:apiVersion}/[controller]")]
[Authorize(Roles = "SuperUser,PlantAdministrator,EndUser")]
public class UploadController : ControllerBase
{...}

--这个很好--但是我想用一个组合.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-06 09:58:20

我找到了解决办法。您可以将参数添加到授权注释中,如下所示:

代码语言:javascript
运行
复制
[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!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60561496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档