C# .Net Core Swashback跳过重定向上的授权标头

C# .Net Core Swashback跳过重定向上的授权标头,c#,.net-core,swagger-ui,swashbuckle,minio,C#,.net Core,Swagger Ui,Swashbuckle,Minio,在.Net核心web API中,我使用Swashback集成了Swagger。API是受保护的,因此在Swagger UI中执行某些请求之前需要进行授权和登录。这一切都很好 现在,一个API调用创建一个预先签名的URL并返回一个HTTP重定向到文件服务器(预先签名的URL) 问题是Swagger UI将带有JWT令牌的授权头发送到文件服务器(MinIO)。这会导致文件服务器接收两种不同的身份验证机制,并以无效请求进行响应 有没有办法影响Swagger UI处理重定向的方式或不在重定向时发送令牌?

在.Net核心web API中,我使用Swashback集成了Swagger。API是受保护的,因此在Swagger UI中执行某些请求之前需要进行授权和登录。这一切都很好

现在,一个API调用创建一个预先签名的URL并返回一个HTTP重定向到文件服务器(预先签名的URL)

问题是Swagger UI将带有JWT令牌的授权头发送到文件服务器(MinIO)。这会导致文件服务器接收两种不同的身份验证机制,并以无效请求进行响应


有没有办法影响Swagger UI处理重定向的方式或不在重定向时发送令牌?

我也遇到了这个问题,并意识到当
fetch
重定向到预先指定的S3 URL时,无法阻止它从API发送授权头

最终,我能够通过使用Swagger的
responseInterceptor
配置参数和一个自定义函数来实现这一点,该函数检测来自S3的错误请求(400)响应,然后使用
凭据重新发出
获取
请求:“省略”

这是我为Swagger定制的响应拦截器:

//swagger-ui-extensions.js
函数序列化HeaderValue(值){
const isMulti=value.includes(',');
返回isMulti?值。拆分(','):值;
}
函数序列化标头(标头={}){
返回数组.from(headers.entries()).reduce((acc,[header,value])=>{
acc[header]=序列化HeaderValue(值);
返回acc;
}, {});
}
功能myResponseInterceptor(响应){
//注意:可能应该添加额外的检查,以确定是否重新发出获取。这只是一个初始起点。
if(response.ok===false&&response.status===400&&response.headers['server']===='AmazonS3'){
//这里是重要的部分,重新发出fetch,但不允许我们的身份验证头流动
response=fetch(response.url,{credentials:'omit'})
.然后(NativerResponse=>{
//我们无法返回本机响应,因为Swagger UI试图分配header属性(以及可能的其他属性)
//因此,返回本机响应的序列化克隆。仅供参考,这与Swagger的fake中的逻辑完全相同
//fetch的实现。
const getBody=nativeResponse.blob | | nativeResponse.buffer;
返回getBody.call(nativeResponse)。然后返回(body=>{
返回{
好的:nativeResponse.好的,
url:nativeResponse.url,
状态:nativeResponse.status,
statusText:NativerResponse.statusText,
标题:序列化标题(nativeResponse.headers),
资料来源:body
};
});
});
}
返回响应;
}
然后在
index.html

//(为简洁起见省略了其他代码…)
//确保在页面中包含自定义JS
// 
//在此处指定自定义响应接收器。。。
configObject.responseInterceptor=myResponseInterceptor;
//开始招摇过市UI调用区域
const ui=SwaggerUIBundle(configObject);
initOAuth(oauthConfigObject);
//结束招摇UI调用区域
window.ui=ui;
我使用ASP.NET Core并使用以下说明为Swagger UI提供了自己的
index.html


在所有这些之后,这一点出人意料地起了作用,我可以大摇大摆地看到来自S3的重定向响应。

我找到了这篇博文。你能检查一下吗;你解决了吗?不,我从来没有解决过这个问题。由于swagger在生产中被禁用,我只在开发/测试中使用它,所以它没有优先权进行进一步调查。很抱歉