如果你繞過認證,你如何區分內部或公共的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