如果你绕过认证,你如何区分内部或公共的API请求?这会导致安全漏洞。所以你不应该绕过认证。
如果您在mvc应用程序中使用openidconnect身份验证,则可以设置SaveTokens=true
。它使您能够将访问令牌存储在Cookie中。当你在mvc动作中调用api时,你可以发送这个access_token
到api。
另一种方式使用两个不同的认证中间件,一个用于公共访问的内部另一个(这很难实现)。
我会用第一种方法。
更新
为了实现自己的目标,一个取巧的办法来了我的脑海里,但我不知道这是好办法:
创建一个过滤器供应商:
public class EncFilterProvider : IFilterProvider
{
public int Order
{
get
{
return -1500;
}
}
public void OnProvidersExecuted(FilterProviderContext context)
{
}
public void OnProvidersExecuting(FilterProviderContext context)
{
// remove authorize filters
var authFilters = context.Results.Where(x =>
x.Descriptor.Filter.GetType() == typeof(AuthorizeFilter)).ToList();
foreach(var f in authFilters)
context.Results.Remove(f);
}
}
然后根据配置值有条件地注册它
public void ConfigureServices(IServiceCollection services)
{
if(config["servermode"] = "internal")
{
services.AddScoped<IFilterProvider, EncFilterProvider>();
}
}
Coul ðdownvoter请评论我做错了什么问这个问题或我问的方式? – NicolasR