我创建了一个使用 Individual Account Security 的asp.net webapi应用程序,以便默认启用Bearer令牌 . 它工作正常,所以我能够在Postman中测试它们没有问题 .
当我尝试通过Swashbuckle集成Swagger UI时,问题就出现了 . 我通过以下方式安装了Swashbuckle:
Install-Package Swashbuckle
然后更改 SwaggerConfig.cs :
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.ApiKey("Token")
.Description("Filling bearer token here")
.Name("Authorization")
.In("header");
}
.EnableSwaggerUi(c =>
{
c.EnableApiKeySupport("Authorization", "header");
};
启动我的应用程序并填写Bearer令牌:
但是当我运行需要授权的api请求时,它不起作用 . 这是截图:
承载令牌添加到标头中的 Authorization . 但我仍然得到错误401.我'm wondering if it'因为令牌被编码(SPACE被%20取代)?任何的想法?谢谢 .
顺便说一句,我想知道如何在我的Swagger文档中添加 /token ,以便我可以在Swagger UI中获取令牌 .
2 回答
更新
下面详述的问题现在已在Swashbuckle v5.5.0中解决 .
问题
刚遇到完全相同的问题 . 我认为根本原因是Swashbuckle's source code中的这一行:
这是HTML输入字段的值通过URL编码将空格转换为
%20
的位置 . 我打算在Swashbuckle repo on GitHub中打开一个问题 .解决方法
在该问题得到解决之前,这里有一个解决方法,它基于使用注入Swagger UI的Javascript文件替换上面的行:
在安装了Swashbuckle的项目中,创建一个新文件夹并将其命名为"Swagger" .
在新文件夹中创建一个名为"SwaggerUiCustomization.js"的新Javascript文件并将此脚本放入其中:
在解决方案资源管理器中,选择文件并按Alt Enter编辑其属性 . 在“属性”窗口中,将文件的“构建操作”更改为“嵌入式资源” .
在SwaggerConfig.cs文件中,在
EnableSwaggerUi()
代码块中添加以下行:c.InjectJavaScript(thisAssembly, "<Project_Default_Namespace>.Swagger.SwaggerUiCustomization.js");
当然,请确保将
<Project_Default_Namespace>
替换为项目的默认命名空间 .运行项目并在文本框中输入"Bearer " . 当您调用控制器操作时,您应该在服务器端获得完全相同的值 - 使用空格而不是
%20%
.注意:此示例使用Json Web Tokens .
您的代码可以设置,因此授权字符串中不需要“Bearer” .
WebApi项目中的代码检索令牌(请参阅下面代码段中的 token = ... ):
Swagger ApiKey:
Swagger启用ApiKey支持:
将标记粘贴到Swagger UI中的Api_Key表单元素中:
它在Swagger中的请求标头中的显示方式: