![](/img/trans.png)
[英]ASP.NET Core 3.1 how to return 401 Unauthorized instead of Challenge with Azure AD B2C
[英]How to validate Azure AD B2C token from query string in Asp.net Core?
我有一個帶有一些控制器和SignalR集線器的asp.net Web API應用程序。 使用Azure AD B2C進行JWT令牌驗證的配置如下:
services.AddAuthentication(AzureADB2CDefaults.JwtBearerAuthenticationScheme)
.AddAzureADB2CBearer(options => _configuration.Bind("AzureAdB2C", options))
這可以在控制器上正常工作,而我不必擔心Azure AD B2C令牌驗證的復雜性 。
現在,為了使signalR集線器支持Web套接字或服務器發送的事件, 應該從querystring中讀取身份驗證令牌 。 我應該這樣處理OnMessageReceived事件:
services.AddAuthentication(...)
.AddJwtBearer(options =>
{
options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var accessToken = context.Request.Query["access_token"];
// If the request is for our hub...
var path = context.HttpContext.Request.Path;
if (!string.IsNullOrEmpty(accessToken) &&
(path.StartsWithSegments("/hubs/chat")))
{
// Read the token out of the query string
context.Token = accessToken;
}
return Task.CompletedTask;
}
};
});
不幸的是,AzureAdB2COptions對象無法讓我訪問身份驗證事件。
如何協調兩種方法?
也許可以通過編寫自己的AuthenticationHandler來獲得更多手冊。 您可以使用.AddAuthorization和.AddAuthentication的IServiceCollection擴展來編寫自己的邏輯來完成應該發生的事情。
在后dotnet核心世界中,我在C#中發現的東西,只要使用它們所需要的框架就很少。 框架的東西簡直是脆弱而脆弱,在5年中,他們已經全部重做了3次,沒有人能夠在每個Startup.cs中維護5歲的流利構建者怪異的東西。
編寫自己的AuthenticationHandler是使用單行流利的構建器擴展方法與完全忽略整個框架以及編寫使用邏輯和推理的自己框架之間的良好折衷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.