У нас есть API (.net core 2.2), который использует IdentityServerAuthenticationDefaults.AuthenticationScheme
для всех контроллеров, который работает нормально.
Теперь мы решили добавить SignalR Hub для конференц-сервиса.Концентратор работает нормально, только если мы удалим атрибут авторизации [Authorize(AuthenticationSchemes = IdentityServerAuthenticationDefaults.AuthenticationScheme)]
Мы попытались обработать токен в запросе, используя оба следующих метода (TokenRetriever или JwrBearerEvents) :
services.AddAuthentication()
.AddIdentityServerAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme, options =>
{
options.Authority = AuthURL;
options.SupportedTokens = SupportedTokens.Jwt;
options.RequireHttpsMetadata = HttpsSetting;
options.ApiName = APIs.API_Commerce;
options.TokenRetriever = new Func<HttpRequest, string>(req =>
{
var fromHeader = TokenRetrieval.FromAuthorizationHeader();
var fromQuery = TokenRetrieval.FromQueryString();
return fromHeader(req) ?? fromQuery(req);
});
options.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/")))
{
// Read the token out of the query string
context.Token = accessToken;
}
return Task.CompletedTask;
};
});
По какой-то причине тезисы запускаются только при вызове контроллеров, но игнорируют все вызываемые методы из клиента.
Обратите внимание, что у нас есть AuthServer, который предоставляет токены иAPI.Мы используем угловой 7 с модулем aspnet / signalr для клиентской стороны.