Итак, у меня есть настройка IdentityServer4 в отдельном приложении, на которое в коде будет ссылаться WebConfigurationManager.AppSettings["IdentityServer:Authority"]
.
У меня есть приложение .NET Framework 4.6.1 WebApi, которому необходимо использовать это приложение для аутентификации запросов. У меня есть настройка приложения WebApi как ApiResource «mywebppi» в приложении IdentityServer4.
Чтобы сделать это в приложении .NET Core, просто добавьте следующий код в Startup.cs:
services.AddAuthentication(Authentication.Bearer)
.AddJwtBearer(Authentication.Bearer, options =>
{
options.Authority = Configuration.GetSection("IdentityServer:Authority").Value;
options.RequireHttpsMetadata = false;
options.Audience = "mywebppi";
});
Но, поскольку это приложение .NET Framework 4.6.1 WebApi, я не могу этого сделать. Я читал, что вы можете использовать IdentityServer3.AccessTokenValidation и Owin для этого, но поскольку пакет nuget IdentityServer3 использует IdentityModel 1.9.2–2.0.0, а мое приложение WebApi уже использует IdentityModel 3.10.10 и не может быть понижено до такой степени, это не вариант.
Я нашел в другом месте о попытке использовать UseOpenIdConnectAuthentication Owin. Я пробовал это:
[assembly: OwinStartup(typeof(MyWebApi.Startup))]
namespace MyWebApi
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType("Bearer");
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
Authority = WebConfigurationManager.AppSettings["IdentityServer:Authority"],
Scope = "mywebapi",
ResponseType = "id_token",
UseTokenLifetime = false,
RequireHttpsMetadata = false,
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive,
SignInAsAuthenticationType = "Bearer"
});
}
}
}
Но я продолжаю получать «Сообщение»: «Авторизация отклонена для этого запроса».