Вы не должны добавлять удостоверение, если используете Jwt autentication ... Примечание. Метод расширения AddDefaultIdentity используется для добавления службы пользовательского интерфейса по умолчанию для Razor Pages и MVC. И это также требует, чтобы вы добавили StaticFiles.
Обратите внимание на дополнительный код и его расположение в методе Configure.
Попробуйте это в своем классе запуска:
public class Startup
{
//add
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddNewtonsoftJson();
services.AddTransient<IJwtTokenService, JwtTokenService>();
//Setting up Jwt Authentication
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
services.AddResponseCompression(opts =>
{
opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "application/octet-stream" });
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseResponseCompression();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBlazorDebugging();
}
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(routes =>
{
routes.MapDefaultControllerRoute();
});
app.UseBlazor<Client.Startup>();
}
}
}
Надеюсь это поможет...
Обновление 1: * Обновите свой класс Startup с помощью приведенного выше кода * Добавьте аннотацию к контроллеру SampleDataController следующим образом:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
public class SampleDataController : Controller
{
// ..
}
- Запустите приложение, а затем отправьте HTTP-запрос в Postman или Fiddler для URL-адреса:
api / SampleData / WeatherForecasts
Ответ должен содержать созданный JwtToken
Краткое описание процесса выполнения: отправка запроса на получение в ваш веб-API. Запрос к точке маршрута WeatherForecasts перенаправляется контроллеру токена, цель которого - создать токен Jwt и вернуть его вызывающей стороне. Обратите внимание, что этот контроллер не проверяет личность пользователя, от имени которого был отправлен этот запрос ...
TO DO:
- Создайте службу для хранения токена Jwt: эта служба может использовать расширения Blazor для LocalStorage и SessionStorage для хранения и получения токенов Jwt. Эта служба может содержать такие методы, как IsAutenticated, GetToken и т. Д.
Примечание. Вы можете передать токен Jwt с сервера в Blazor с более подробной информацией о пользователе в виде файла cookie.
- Создайте компонент входа в систему для входа пользователя, если он еще не вошел в систему и пытается получить доступ к защищенному ресурсу.
Примечание. Если пользователь уже аутентифицирован, он не перенаправляется на форму входа. Вместо этого мы отправляем HTTP-запрос на сервер, чтобы получить исходники, необходимые в Blazor, если это так.
Примечание: как мы узнаем, аутентифицирован ли наш пользователь? Мы запрашиваем наш метод IsAutenticated. Если пользователь аутентифицирован, если получить токен Jwt и добавить его в коллекцию заголовков, переданную с помощью нашего вызова HttpClient.
Еще не все...
Вы видите это ?
person
enet
schedule
03.06.2019
microsoft.aspnetcore.identity.ui
. - person Henk Holterman   schedule 03.06.2019Identity
вBlazor
- person Dmitry Pavlov   schedule 03.06.2019