Я использую несколько аутентификаций в своем .net 8 webapi (Cookie, OIDC, JWT). Когда я добавляю только ссылку на Microsoft.IdentityModel.JsonWebTokens, я получаю ошибку ниже.
Ошибка
Невозможно перенаправить к конечной точке авторизации, возможно, конфигурация быть отсутствующим или недействительным.
ВебАпи.csproj
<Project Sdk = "Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<InvariantGlobalization>false</InvariantGlobalization>
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "IdentityModel" Version = "6.2.0" />
<PackageReference Include = "AspNetCore.HealthChecks.UI.Client" Version = "8.0.0" />
<PackageReference Include = "Microsoft.AspNetCore.Authentication.JwtBearer" Version = "8.0.3" />
<PackageReference Include = "Microsoft.AspNetCore.Authentication.OpenIdConnect" Version = "8.0.3" />
<PackageReference Include = "Microsoft.AspNetCore.OpenApi" Version = "8.0.3" />
<PackageReference Include = "Hangfire.AspNetCore" Version = "1.8.11" />
<PackageReference Include = "Hangfire.Core" Version = "1.8.11" />
<PackageReference Include = "Hangfire.SqlServer" Version = "1.8.11" />
<PackageReference Include = "Microsoft.EntityFrameworkCore" Version = "8.0.3" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer" Version = "8.0.3" />
<PackageReference Include = "Serilog" Version = "3.1.1" />
<PackageReference Include = "Serilog.AspNetCore" Version = "8.0.1" />
<PackageReference Include = "Serilog.Extensions.Logging" Version = "8.0.0" />
<PackageReference Include = "Serilog.Formatting.Compact" Version = "2.0.0" />
<PackageReference Include = "Serilog.Settings.Configuration" Version = "8.0.0" />
<PackageReference Include = "Serilog.Sinks.Console" Version = "5.0.1" />
<PackageReference Include = "Serilog.Sinks.File" Version = "5.0.0" />
<PackageReference Include = "Swashbuckle.AspNetCore" Version = "6.5.0" />
<PackageReference Include = "Microsoft.Data.SqlClient" Version = "5.2.0" />
<PackageReference Include = "Microsoft.IdentityModel.JsonWebTokens" Version = "7.5.0" />
</ItemGroup>
</Project>
Конфигурация аутентификации
services.AddAuthentication(sharedOptions =>
{
//sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
//sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
var oidc = new OidcOptions();
configuration.GetSection(OidcOptions.Key).Bind(oidc);
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Scope.Clear();
oidc.Scopes.ForEach(options.Scope.Add);
options.Authority = oidc.Authority;
options.ClientId = oidc.ClientId;
options.ClientSecret = oidc.ClientSecret;
options.ResponseType = OpenIdConnectResponseType.Code;
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProvider = async context =>
{
var authEndpoint = context.ProtocolMessage.IssuerAddress;
// Debug or log the authEndpoint here to inspect its value
await Task.CompletedTask;
}
};
});
По какой-то причине URL-адрес эмитента не установлен в промежуточном программном обеспечении. Но только когда я добавляю зависимость Jwt.





Проблема в том, что Microsoft.AspNetCore.Authentication.OpenIdConnect 8.0.3 имеет ссылку на Microsoft.IdentityModel.Protocols.OpenIdConnect 7.1.2. Это ссылка на Microsoft.IdentityModel.JsonWebTokens версии 7.1.2.
Обходной путь — напрямую добавить ссылку на Microsoft.IdentityModel.Protocols.OpenIdConnect 7.5.0. Теперь я могу использовать пакет Microsoft.IdentityModel.JsonWebTokens 7.5.0.
Проблемы с Гитхабом: