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

为Swagger-UI添加基本授权

牛越
2023-03-14

我目前已经部署了一个swagger项目,但是我在添加一些基本的授权时遇到了麻烦。当你点击“试试看!”按钮,您需要登录帐户才能访问结果。我有一个帐户,我想在每次有人试图访问api时自动使用它。贝娄是我这个项目的index.html:

    <!DOCTYPE html>
<html>
<head>
  <title>Swagger UI</title>
  <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
  <link href='css/screen.css' media='print' rel='stylesheet' type='text/css'/>
  <script src='lib/jquery-1.8.3.js' type='text/javascript'></script>
  <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
  <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
  <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
  <script src='lib/handlebars-1.0.rc.1.js' type='text/javascript'></script>
  <script src='lib/underscore-min.js' type='text/javascript'></script>
  <script src='lib/backbone-min.js' type='text/javascript'></script>
  <script src='lib/swagger.js' type='text/javascript'></script>
  <script src='lib/swagger-ui.js' type='text/javascript'></script>
  <script src='lib/highlight.7.3.pack.js' type='text/javascript'></script>

  <script type="text/javascript">
    $(function () {
        window.swaggerUi = new SwaggerUi({
                discoveryUrl:"https://localhost:8080/AssistAPI/api-docs.json",
                apiKey:"",
                dom_id:"swagger-ui-container",
                supportHeaderParams: true,
                supportedSubmitMethods: ['get', 'post', 'put'],
                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"
            });
            window.authorizations.add("key", new ApiKeyAuthorization("Authorization", "XXXX"header"));
            //window.authorizations.add("key", new ApiKeyAuthorization("username", "rmanda", "header"));
            window.swaggerUi.load();
        });
  </script>
</head>

<body class="swagger-section">
<div id='header'>
  <div class="swagger-ui-wrap">
    <a id="logo" href="http://swagger.io">swagger</a>
    <form id='api_selector'>
      <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>
      <div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div>
      <div class='input'><a id="explore" href="#">Explore</a></div>
    </form>
  </div>
</div>

<div id="message-bar" class="swagger-ui-wrap">&nbsp;</div>
<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
</body>
</html>

我正在尝试确定信息应该去往何处,以允许基本授权。我知道它涉及到下面几行代码,但是有人能向我解释得更详细一点吗?我意识到GitHub上的swagger文档不是很清晰或者很有帮助

window.authorizations.add("key", new ApiKeyAuthorization("Authorization", "XXXX"header"));
window.authorizations.add("key", new ApiKeyAuthorization("username", "password", "header"));

共有3个答案

易研
2023-03-14

我有一个类似的问题,建议的答案是正确的。在我的情况下,我最终在索引中添加了一些内容。html类:

var myAuth = "Basic " + btoa("user:password");
window.authorizations.add("key", neSwaggerClient.ApiKeyAuthorization("Authorization", myAuth, "header"));

我将它添加到已标记的方法< code > addApiKeyAuthorization 上,或者您可以创建另一个方法,但在< code>window.swaggerUi.load()之后调用它;

但是,如果您的 swagger-ui 以“独立”方式运行,并且带有类似 gulp 或 grunt 之类的东西,则可能需要将服务配置为接受所有 OPTIONS 请求。

我有点挣扎,我希望它能帮助别人。

问候

郝承悦
2023-03-14

基本身份验证标头的正确设置是:

Authorization: Basic username:password

字符串用户名:密码需要使用 RFC2045-MIME(Base64 的变体)进行编码。在此处查看更多详细信息:https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side

然后,要配置此标头,应执行以下操作:

考虑到用户名:密码的Base64编码是< code > dxnlcm 5 HB Wu 6 cgfzc 3d vcmq =

swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization("Authorization", "Basic dXNlcm5hbWU6cGFzc3dvcmQ=", "header"));

在这里阅读更多信息:https://github.com/swagger-api/swagger-ui

商泽宇
2023-03-14

在 Swagger UI 3.13.0 中,您可以使用预授权Basic 方法来预填充基本授权用户名和密码以进行“试用”调用。

假设您的API定义包括基本身份验证的安全方案:

swagger: '2.0'
...
securityDefinitions:
  basicAuth:
    type: basic

security:
  - basicAuth: []

您可以为基本身份验证指定默认用户名和密码,如下所示:

// index.html

const ui = SwaggerUIBundle({
  url: "https://my.api.com/swagger.yaml",
  ...
  onComplete: function() {
    // "basicAuth" is the key name of the security scheme in securityDefinitions
    ui.preauthorizeBasic("basicAuth", "username", "password");
  }
})

“试用”将使用指定的用户名和密码,如果您在Swagger UI中单击“授权”按钮,您将看到用户名和屏蔽密码已预先填充在UI中。


此答案还包含Swagger UI 3.1.6-3.12.1的解决方案,该解决方案不具有<code>预授权基础

 类似资料:
  • 在我的一个Rest API调用中,我需要添加标题“Authorization:partner_id:timestamp signature” 如果公司名称是静态字符串,则可以对其进行硬编码,其中作为合作伙伴的id是查询参数的一部分,用户输入它,签名计算为sha256(机密,密码)。消化编码('base64') 我现在看到只有api_密钥,而且在swagger ui中允许基本授权,我如何以及在哪里实

  • 我正试图改变大摇大摆的基本路线。目前我有 当我从swagger发送请求时,请求将转到,但服务返回。 当我通过邮递员发送的请求时,它就可以工作了。 因此api注册为,swagger只是将基础添加到它的顶部,如果请求发送到swagger UI将无法工作 但问题是现在可以在上获得swagger文档,而不是。因为我们在上有所有其他服务文档,所以这是没有用的。 是否有任何方法可以添加基本文件,并且仍然可以访

  • 我有一个spring boot应用程序运行在spring boot starter父版本:2.6.1和springdoc openapi ui:1.2.32上。斯威格在当地表现良好。当我在Kubernetes集群内部署应用程序时,问题就来了。此时,spring doc open API会自动重定向到HTTP(:80),而不是HTTPS。如果我从基本URL中删除:80,则会出现招摇ui。使用这里给出

  • 我使用的是Swagger 2.0和Swagger UI 3.0.3。 在我的api_定义中。yaml在我的路径之前有以下内容: 这将在Swagger UI中添加一个授权按钮,用户可以在其中粘贴他们的API密钥。我希望此API密钥在每个请求的请求标头中发送。但这不会发生,我不确定为什么。我错过了什么吗? 编辑: 请求似乎发出了,我回来了。 Chrome开发工具显示以下请求头: 我有路径设置为: 定义

  • 通过添加这个SwaggerConfig文件并添加以下依赖项,我可以将swagger2设置到我的SpringBoot应用程序中: pom.xml 尽管我的controller类看起来像这样: ...我仍然可以通过执行以下操作来调用该控制器: RESTendpoint的curl-x GET如下所示: 看来spring-boot只是在浏览器中使用简单的旧版http://localhost:8080作为s

  • .Net Framework 4.6.1,类库项目(Web API) 我已经将swagger/swashbuckle nuget添加到项目中,并将SwaggerConfig.cs文件添加到我的App_Start文件夹中。 SwaggerConfig.cs的剪报 然后我继续注册服务 但是我不确定在哪里设置了查看文档所需的用户名/密码。API方法都使用令牌进行认证,但是我试图添加一个安全层,通过使用基