我有兩個微服務需要訪問調用用戶的 IWindowsPrincipal。我正在使用 .Net Core 3.1 編寫一個 API 網關,它將充當這些服務的反向代理。我在 API Gateway 中配置了身份驗證和授權,如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("All allowed",
builder =>
{
builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate();
services.AddAuthorization();
services.AddControllers();
services.AddHttpForwarder();
services.AddOcelot();
services.AddSwaggerForOcelot(_configuration);
}
public void Configure(IApplicationBuilder app)
{
app.UseCors("All allowed");
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseSwaggerForOcelotUI(options =>
{
options.PathToSwaggerGenerator = "/swagger/docs";
});
app.UseOcelot();
}
我想在微服務的方法中使用 HttpContext.User.Identity 訪問調用用戶的身份。
在微服務的方法中,HttpContext.User.Identity.IsAuthenticated為false,身份信息為空。
有沒有辦法在網關中配置 Ocelot,以便它在必要時挑戰調用者接收 Windows 身份驗證信息並將其傳遞給微服務?如果這是不可能的,那麼推薦的方法是實現我的目標,在每個微服務中執行 Windows 身份驗證嗎?Ocelot 不是應該允許我在一個地方為所有微服務處理身份驗證嗎?
Ocelot 的文檔是指使用 JWT 進行身份驗證。我應該得出結論 Ocelot 只提供 JWT 配置嗎?
我已經閱讀了一些關於 Yarp ( https://microsoft.github.io/reverse-proxy/ ) 我應該使用 Yarp 而不是 Ocelot 來實現我的目標嗎?
我以為答案是否定的
有沒有辦法在網關中配置 Ocelot,以便它在必要時挑戰調用者接收 Windows 身份驗證信息並將其傳遞給微服務?
問題是Windows 身份驗證是有狀態的,服務器和客戶端在同一個 Active Directory 中,您可以在 .NET Core Windows 身份驗證中找到註釋
Windows 身份驗證是一種主要用於 Intranet 的有狀態方案,其中代理或負載平衡器通常不處理客戶端和服務器之間的流量。
微服務架構需要無狀態而非有狀態(意味著服務器和客戶端在不同的 AD/OS/網絡中)。網關是微服務圖中的無狀態組件。
Ocelot 可以對 Windows 用戶進行身份驗證的唯一方法是使用 Active Directory 聯合服務 (ADFS) 和 OpenID Connect (OIDC) 或自己在 IIS 服務器中構建身份服務器。您可以閱讀 ADFS 或 Azure AD 中的方案以了解更多詳細信息。
此外,還有我對以下兩個問題的回答:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句