当前位置: 首页 > news >正文

dedecms修改网站教程企业在公司做的网站遇到的问题

dedecms修改网站教程,企业在公司做的网站遇到的问题,高端网站开发哪里有,阜阳网站制作公司去哪找ASP.NET Core 实现基于 ApiKey 的认证Intro之前我们有介绍过实现基于请求头的认证#xff0c;今天来实现一个基于 ApiKey 的认证方式#xff0c;使用方式参见下面的示例Sample注册认证服务services.AddAuthentication().AddApiKey(options {options.ApiKey 123456… ASP.NET Core 实现基于 ApiKey 的认证Intro之前我们有介绍过实现基于请求头的认证今天来实现一个基于 ApiKey 的认证方式使用方式参见下面的示例Sample注册认证服务services.AddAuthentication().AddApiKey(options {options.ApiKey  123456;options.ApiKeyName  X-ApiKey;});可以根据需要是否要指定为默认的认证 Schema控制器示例代码[HttpGet(apiKeyTest)] [Authorize(AuthenticationSchemes  ApiKeyAuthenticationDefaults.AuthenticationSchema)] public IActionResult ApiKeyAuthTest() {return Ok(User.Identity); }因为我们没有指定为默认的认证 Schema所以在这个 Action 上我们指定了希望使用的认证方式调用示例直接调用不使用 ApiKey使用错误的 ApiKey使用正确的 ApiKey从上面的结果可以看出来只有在 ApiKey 是正确的情况下才能正常调用 ApiImplement对于自定义认证方式我们之前也有介绍过基于请求头的认证方式基于 ApiKey 的认证和请求头也类似对于自定义认证方式核心需要定义的有两个类型一个是认证选项自定义的 AuthenticationOption一个是认证处理器自定义的认证处理逻辑下面来看实现ApiKeyAuthenticationOptions实现如下public sealed class ApiKeyAuthenticationOptions : AuthenticationSchemeOptions {public string ApiKey { get; set; }public string ApiKeyName { get; set; }  X-ApiKey;public string ClientId { get; set; }public KeyLocation KeyLocation { get; set; }public override void Validate(){if (string.IsNullOrWhiteSpace(ApiKey)){throw new ArgumentException(Invalid ApiKey configured);}} }public enum KeyLocation {Header  0,Query  1,HeaderOrQuery  2,QueryOrHeader  3, }继承于 AuthenticationSchemeOptions 并添加认证所需的配置我们增加了一个 KeyLocation 以配置读取 ApiKey 的来源Header 就是从请求头去读Query 就是从查询字符串读取HeaderOrQuery 就是优先读取 Header对应的 QueryOrHeader 就是优先读取查询字符串另外我们可以重载 Validate 方法来对我们的配置进行校验ApiKeyAuthenticationHandler认证处理器是认证方式的核心处理逻辑我们的处理也比较简单就是直接读取 ApiKey 与配置的 ApiKey 对比一致就认证成功否则就是非法请求实现如下public sealed class ApiKeyAuthenticationHandler : AuthenticationHandlerApiKeyAuthenticationOptions {public ApiKeyAuthenticationHandler(IOptionsMonitorApiKeyAuthenticationOptions options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock){}protected override TaskAuthenticateResult HandleAuthenticateAsync(){var authResult  HandleAuthenticateInternal();return Task.FromResult(authResult);}private AuthenticateResult HandleAuthenticateInternal(){StringValues keyValues;var keyExists  Options.KeyLocation switch{KeyLocation.Query  Request.Query.TryGetValue(Options.ApiKeyName, out keyValues),KeyLocation.HeaderOrQuery  Request.Headers.TryGetValue(Options.ApiKeyName, out keyValues) || Request.Query.TryGetValue(Options.ApiKeyName, out keyValues),KeyLocation.QueryOrHeader  Request.Query.TryGetValue(Options.ApiKeyName, out keyValues) || Request.Headers.TryGetValue(Options.ApiKeyName, out keyValues),_  Request.Headers.TryGetValue(Options.ApiKeyName, out keyValues),};if (!keyExists)return AuthenticateResult.NoResult();if (keyValues.ToString().Equals(Options.ApiKey)){var clientId  Options.ClientId.GetValueOrDefault(ApplicationHelper.ApplicationName);return AuthenticateResult.Success(new AuthenticationTicket(new ClaimsPrincipal(new[]{new ClaimsIdentity(new[]{new Claim(nameof(Options.ClientId), clientId, ClaimValueTypes.String, ClaimsIssuer),}, Scheme.Name)}), Scheme.Name));}return AuthenticateResult.Fail(Invalid Api-Key);} }Extensions为了方便使用添加了几个常用的扩展方法类似于 ASP.NET Core 自带的认证方式首先增加了一个默认的认证模式public static class ApiKeyAuthenticationDefaults {public const string AuthenticationSchema  ApiKey; }然后增加了一些依赖注入的扩展public static AuthenticationBuilder AddApiKey(this AuthenticationBuilder builder) {return builder.AddApiKey(ApiKeyAuthenticationDefaults.AuthenticationSchema); }public static AuthenticationBuilder AddApiKey(this AuthenticationBuilder builder, string schema) {return builder.AddApiKey(schema, _  { }); }public static AuthenticationBuilder AddApiKey(this AuthenticationBuilder builder,ActionApiKeyAuthenticationOptions configureOptions) {return builder.AddApiKey(ApiKeyAuthenticationDefaults.AuthenticationSchema,configureOptions); }public static AuthenticationBuilder AddApiKey(this AuthenticationBuilder builder, string schema,ActionApiKeyAuthenticationOptions configureOptions) {if (null ! configureOptions){builder.Services.Configure(configureOptions);}return builder.AddSchemeApiKeyAuthenticationOptions, ApiKeyAuthenticationHandler(schema,configureOptions); }More目前的实现比较简单只是对 ApiKey 做了校验而且是直接读取的配置大家可以根据自己需要进行一定的扩展比如 ApiKey 从数据库中读取、增加额外的 claim 配置等。对于一些需要配置客户端访问权限的可以使用这种方式来实现简单的认证来代替基于 OAuth 的 Client Credentials 方式相对来说会简单一些Referenceshttps://github.com/WeihanLi/WeihanLi.Web.Extensions/blob/dev/src/WeihanLi.Web.Extensions/Authentication/ApiKeyAuthentication/ApiKeyAuthenticationHandler.cshttps://github.com/WeihanLi/WeihanLi.Web.Extensions/blob/dev/samples/WeihanLi.Web.Extensions.Samples/Program.csasp.net core 自定义认证方式--请求头认证
http://wiki.neutronadmin.com/news/316130/

相关文章:

  • 彩票网站 模块中核哪个公司待遇最好
  • 网站超级外链公司网站介绍范文
  • 网站建设公司公司好灰色 网站
  • 延安有哪些做网站的公司重庆网站seo
  • 网站seo推广优化北京购物网站建设公司
  • 网站的盈利点网站自动适应屏幕
  • 数据库与网站建设重庆大渝网最新消息
  • 天津网站建设方案服务网站快照时间
  • 深圳市建设厅官方网站施工企业项目负责人现场带班时间
  • 北京专业网站建设大全wordpress 还原备份数据库备份
  • 三水网站设计wordpress 待审文章
  • 贵阳网站建设制作织梦 音乐网站
  • 深圳建站网站公司怎样在我的世界做汽车视频网站
  • 网站信息查询北京房产网官网
  • 网站运营适合什么样的人做微官网 手机网站
  • 织梦网站地图制作好看的模板
  • 江苏华江建设集团有限公司网站南京网站制作费用
  • 保定市制作网站公司软件工程专业招聘网站
  • 网站两个域名简单广告设计软件
  • 站群cms系统区块链
  • 网站公司注册流程淘宝客网站源码html
  • 网站开发需求文件进口网站建设
  • 浙江网站建设抖音seo优化建材网站建设 南宁
  • 一个空间只能放一个网站吗福田住房和建设局网站官网
  • 滁州新手跨境电商建站哪家好wordpress评论头像
  • 求好的设计网站福州网站开发风格
  • 新闻宣传培训网站内容建设网站建设需要的资料
  • 网站建设需不需要编程江苏建设教育协会网站
  • 南海做网站公司网站开发合同注意事项
  • 网站的技术支持汶上手机网站建设