当前位置: 首页 > 知识库问答 >
问题:

如何让Swagger将API密钥作为超文本传输协议而不是在URL中发送

尹凌龙
2023-03-14

我在servicestack中使用swagger,但是我从我的/resources URL中得到一个401未授权错误,因为它需要一个API密钥。

除非我弄错了,否则根据文档,在从html页面初始化Swagger时,我应该将supportHeaderParams以及JSON参数中的apiKeyName和apiKey值设置为true。

然后,我期望在http请求标头中看到我的API密钥,但它仍然被附加到URL而不是标头集合中。

这是在我的超文本标记语言页面中初始化Swagger的代码:

 window.swaggerUi = new SwaggerUi({
            discoveryUrl: "http://pathtomyservice.com/resources",
                headers: { "testheader" : "123" },
                apiKey: "123",
                apiKeyName: "Api-Key",
                dom_id:"swagger-ui-container",
                supportHeaderParams: true,
                supportedSubmitMethods: ['get', 'post', 'put', 'delete'],
                onComplete: function(swaggerApi, swaggerUi){
                    if(console) {
                        console.log("Loaded SwaggerUI");
                        console.log(swaggerApi);
                        console.log(swaggerUi);
                    }
                  $('pre code').each(function(i, e) {hljs.highlightBlock(e)});
                },
                onFailure: function(data) {
                    if(console) {
                        console.log("Unable to Load SwaggerUI");
                        console.log(data);
                    }
                },
                docExpansion: "none"
            });

不幸的是,我没有得到任何标题,没有“Api密钥”或“testheader”。

共有3个答案

怀展
2023-03-14

你可以试试这个

(function () {
    $(function () {
        var basicAuthUI =
                '<div class="input"><input placeholder="username" id="input_username" name="username" type="text" size="10"/></div>' +
                '<div class="input"><input placeholder="password" id="input_password" name="password" type="password" size="10"/></div>';
        $(basicAuthUI).insertBefore('#api_selector div.input:last-child');
        $("#input_apiKey").hide();

        $('#input_username').change(addAuthorization);
        $('#input_password').change(addAuthorization);
    });

    function addAuthorization() {
        SwaggerApi.supportHeaderParams = true;
        SwaggerApi.headers = {"authentication": "test"};
        var username = $('#input_username').val();
        var password = $('#input_password').val();
        if (username && username.trim() != "" && password && password.trim() != "") {
            var basicAuth = new SwaggerClient.PasswordAuthorization('basic', username, password);
            window.swaggerUi.api.clientAuthorizations.add("basicAuth", basicAuth);
            console.log("authorization added: username = " + username + ", password = " + password);
        }
    }
})();
丁兴德
2023-03-14

在swagger-ui 2.0或更高版本中,这是微不足道的:

https://github.com/wordnik/swagger-ui#header-parameters

// add a new ApiKeyAuthorization when the api-key changes in the ui.
$('#input_apiKey').change(function() {
  var key = $('#input_apiKey')[0].value;
  if(key && key.trim() != "") {
    window.authorizations.add("key", new ApiKeyAuthorization("api_key", key, "header"));
  }
})

这也更具可扩展性,并支持自定义身份验证机制。

阎德业
2023-03-14

我认为这可能是招摇用户界面中的一个错误。

作为一种变通方法,我在swagger索引中添加了以下内容。html文件。

$(function () {
   $.ajaxSetup({
       beforeSend: function (jqXHR, settings) {
           jqXHR.setRequestHeader("YourApiKeyHeader", $("#input_apiKey").val());
       }
   });
});

希望这有帮助,

 类似资料:
  • 我试图发布到一个webapi,我已经从一个用NativeScript制作的移动应用程序的C#。 我正在使用和。但是事件总是在触发。 这是我的代码:我的两个导入: 这是我获取图像uri的方式: 这就是我试图发布数据的方式: 我能做错什么?提前感谢。:)

  • 我正在使用oauth签名生成我的oauth签名,以便与woocommerce api连接。我遵循了woocommerce rest api文档中所述的所有步骤: 所需的参数是:oauth_consumer_密钥、oauth_时间戳、oauth_nonce、oauth_签名和oauth_签名方法。oauth_版本不是必需的,应该省略。OAuth nonce可以是消费者密钥唯一的任意随机生成的32个字

  • 我尝试使用以下方法从Api获取json数据 我将这个物体建模如下 数据如下: 当我尝试使用模型访问时,我收到错误“\u InternalLinkedHashMap”

  • 我用Ktor构建了一个Web服务器,并想缓存API方法结果。但是我不知道如何从下面call.response.代码中获取响应正文 如果我无法获得响应体,还有其他解决方案可以在Ktor中缓存API方法的结果吗?

  • 我的反应应用程序是在localhost:3000和节点服务器上运行localhost:5000。当我试图连接到快速API时,路由将localhost:3000/auth/google而不是localhost:5000/auth/google 用户操作。js } setupProxy.js 节点server.js 编辑:反应包。json 我是新手,因此我不知道代理究竟是如何工作的。

  • 我有一个由Python构建的API服务器。我需要一组客户端/计算机通过发出http post请求将数据发送到API服务器。 这里的数据实际上是html内容。(注意:我没有将合法数据转换为HTML/XML格式,数据本身就是我从web上收集的HTML),通常每页约200KB。我正试图通过使用串行/串行和压缩来尽可能减轻网络负载。 我正在考虑通过网络发送原始超文本标记语言。有没有类似序列化html对象的