Я вношу все изменения в свой api, чтобы использовать Azure Ad с функциями ссылки это и это, но когда api развернут, мне нужно заставить пользователя, который получает URL-адрес https://myapi.com/swagger (например), перенаправить его на вход в Azure Ad, а затем знать если у клиента есть права или нет использовать этот api, и снова перенаправить его на мой api, и показать точки, к которым у него есть доступ.
Я вношу некоторые изменения в startup.cs, чтобы использовать OpenIdConnect
//Add AddAzureAdBearer Auth options
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = OpenIdConnectDefaults.AuthenticationScheme;
//options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddOpenIdConnect(option =>
{
option.ClientId = Client;
option.Authority = $"{Instance}/{Tenant}";
option.SignedOutRedirectUri = "https://localhost:44308";
option.AuthenticationMethod = OpenIdConnectRedirectBehavior.RedirectGet;
option.SaveTokens = true;
option.Events = new OpenIdConnectEvents
{
OnRemoteFailure = context =>
{
context.HandleResponse();
return Task.CompletedTask;
}
};
})
.AddCookie()
.AddAzureAdBearer(options => _configuration.Bind("Ad", options));
И я добавляю HomeController для перенаправления в пользовательский интерфейс swagger:
[Authorize]
public class HomeController : Controller
{
[HttpGet("")]
public ActionResult Index()
{
return Redirect("~/swagger");
}
}
Когда я запускаю api, он работает, как указано в спецификации, но когда я пишу https://{host:port}/swagger
, он не работает, не запускается процесс аутентификации и автоматически переходит на https://{host:port}/swagger/index.html
.
Как я могу это исправить?
Я работаю с net core 2.0 и Swashbuckle для чванства.
Вам необходимо добавить поддержку Swagger в ConfigureServices(IServiceCollection services)
и Configure(IApplicationBuilder app, IHostingEnvironment env)
в файле Startup.cs вашего приложения. Для этого вам необходимо создать класс SwaggerServiceExtensions и добавить необходимый код для поддержки Swagger в вашем приложении.
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Swashbuckle.AspNetCore.Swagger;
namespace JwtSwaggerDemo.Infrastructure
{
public static class SwaggerServiceExtensions
{
public static IServiceCollection AddSwaggerDocumentation(this IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1.0", new Info { Title = "Main API v1.0", Version = "v1.0" });
c.AddSecurityDefinition("Bearer", new ApiKeyScheme
{
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
Name = "Authorization",
In = "header",
Type = "apiKey"
});
});
return services;
}
public static IApplicationBuilder UseSwaggerDocumentation(this IApplicationBuilder app)
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1.0/swagger.json", "Versioned API v1.0");
c.DocExpansion("none");
});
return app;
}
}
}
Изменения в файле Startup.cs
Используя указанный выше класс, единственное, что вам нужно сделать в файле Startup.cs, - это следующее:
namespace JwtSwaggerDemo
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public IServiceProvider ConfigureServices(IServiceCollection services)
{
//... rest of services configuration
services.AddSwaggerDocumentation();
//...
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
//.... rest of app configuration
app.UseSwaggerDocumentation();
}
//.... rest of app configuration
}
}
}
Авторизация запросов в пользовательском интерфейсе Swagger Теперь, когда вы загружаете адрес пользовательского интерфейса Swagger (например, https: // локальный: 44321 / swagger / # /), вы увидите кнопку авторизации вверху. Щелчок по нему приводит к модальному окну, которое позволяет вам авторизовать ваше приложение с помощью токена JWT, добавив Bearer в поле ввода значения.
Я не это имел в виду. Этот ответ был первым подходом, который я использовал, но это не то, что я ищу. Мне нужно перенаправить на страницу входа в Microsoft, когда я ввожу адресную строку локальный: 44321 / swagger и нажимаю Enter. Прямо сейчас мой URL-адрес Api по умолчанию (локальный: 44321) перенаправляет меня на логин, но когда я добавляю / swagger, он не запрашивает логин и не показывает мне страницу api. Это моя проблема, я описываю код, который использую. Спасибо