zoukankan      html  css  js  c++  java
  • Swagger ui测试中的验证 apikey

    Swagger ui测试中的验证 apikey


    我们使用swagger 用来呈现webapi的接口,除了可以看到接口的说明和参数说明,还可以进行测试。但是我们的接口通常是有验证的,不是随便就能调用的,这时候用swagger怎么办呢?

    • 修改SwaggerConfig文件
    • 添加api-key-header-auth.js文件
    • 修改api-key-header-auth.js 文件
    • 测试

    1. 修改SwaggerConfig文件

    取消这个的注释,使生效。 c.BasicAuth("basic") .Description("Basic HTTP Authentication");
    取消这个的注释,使生效。 c.InjectJavaScript(thisAssembly, "wang2650.CustomContent.api-key-header-auth.js"); wang2650为项目名

    2. 根目录下创建 CustomContent 文件夹,添加api-key-header-auth.js文件 ,该段js会在调用接口的时候,在head中加入一个名为Authorization的key,内容为apikey的文本框中的值。

    (function () {
        $(function () {
            $('#input_apiKey').show();
            $('#input_apiKey').on('change', function () {
                var key = this.value;
                if (key && key.trim() !== '') {
                    swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization("Authorization", key, "header"));
                }
            });
        });
    })();
    
    

    3. 修改api-key-header-auth.js 文件 文件属性 要选择嵌入资源

    Authorization 文件中的这个名可以任意定义,我通常传token

    4.测试 假设你用DelegatingHandler的方式验证 request.Headers.Authorization 就是apikey。

    public class AuthenticationMessageHandler : DelegatingHandler {
    
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
                CancellationToken cancellationToken)
        {
            if (request.Headers.Authorization == null)
            {
                var reply = request.CreateResponse(HttpStatusCode.Unauthorized, "acc_token验证错误");
                return Task.FromResult(reply);
            }
            
              //token验证后,通过token获取用户信息,此处直接用apike做为用户的身份证
              var principal = new ClaimsPrincipal(new ClaimsIdentity(new[]
                {
                    new Claim(ClaimTypes.Name, request.Headers.Authorization.ToString())
                }, "Basic"));
                // authorize attribute
                request.GetRequestContext().Principal = principal;
        }
        
        }
    
           [HttpGet]
        public string GetId(dynamic  id) {
            return "用户id:" + this.User.Identity.Name; //显示api的值
        }
        
        
        
    

    运行网站,会在头部出现一个apikey的文本框,到这,就完了。你可以开车了。

  • 相关阅读:
    Java基础——消息队列
    Java基础——缓存
    Java基础——动态代理
    Java基础——克隆
    Java基础——锁
    Java基础——线程池
    Java基础——线程
    Java基础——HashMap
    Java基础——String
    SpringMVC的学习____5.乱码问题的解决_两种方法(两个类)
  • 原文地址:https://www.cnblogs.com/wang2650/p/6646639.html
Copyright © 2011-2022 走看看