.net Core API и Angular SPA

У меня есть веб-API, написанный на ядре .net, и приложение angular, которое обращается к методам API. Я защитил api с помощью аутентификации JWT, поэтому при первой загрузке приложения оно регистрируется в приложении, чтобы получить токен JWT для доступа к API. Проблема в том, что я хочу заблокировать определенные методы в моем API, чтобы к ним мог получить доступ только SPA, а не третья сторона. Если я включу инструменты разработчика, я увижу, что мое приложение вызывает мой api для получения токена JWT, но что помешает кому-либо еще делать это и иметь полный доступ к моему API?

вот как работает токен jwt, прочтите, чтобы узнать больше: jwt.io/introduction

Joel Joseph 06.12.2018 11:18

Я знаю, но как мне остановить кого-то, использующего такое приложение, как postmaster, для отправки сообщений в мой API, такой как AddToBasket, я хочу, чтобы только мой веб-сайт мог вызывать этот метод

Darren Mitchinson 06.12.2018 11:24
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
2
217
1

Ответы 1

Использование токенов JWT позволяет вам ограничить доступ к вашему приложению определенной аудиторией, например, вашим Angular SPA. Для этого, когда вы добавляете аутентификацию в свое основное приложение .net, определите целевую аудиторию в конфигурации аутентификации следующим образом:

 services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = "JwtBearer";
                options.DefaultChallengeScheme = "JwtBearer";
            })
            .AddJwtBearer("JwtBearer", jwtBearerOptions =>
            {
                jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true, // verify signature to avoid tampering
                    IssuerSigningKey =
                        new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(appSettings.Secret)),
                    ValidateIssuer = true,
                    ValidIssuer = appSettings.AppIssuer, // site that makes the token
                    ValidateAudience = true,
                    ValidAudience = appSettings.AppAudience, // site that consumes the token
                    ValidateLifetime = true, //validate the expiration 
                    ClockSkew = System.TimeSpan.FromMinutes(0), // tolerance for the expiration date
                };
            });

Как видите, я храню информацию об аудитории в моем файле app.settings.json. Предполагая, что вы используете свой угловой SPA на http://localhost:4200 Теперь вы можете настроить app.settings следующим образом:

{
    "AppSettings": {
        "Secret": "secretKey",
        "AppIssuer": "http://localhost:5000", //this is address of you web api
        "AppAudience": "http://localhost:4200"
    }
}

Отныне каждый запрос, исходящий не от http://localhost:4200, будет неавторизованным.

Извините, я до сих пор не понимаю, насколько это безопасно, если вы можете отслеживать вызов из клиентского приложения в api, то что мешает кому-либо вызывать api? Нужен ли спа-центру какой-то ключ, сгенерированный сервером, чтобы гарантировать, что api принимает запросы только от веб-приложения?

Darren Mitchinson 06.12.2018 22:47

Использование токенов JWT позволяет ограничить доступ к вашему приложению с помощью секретного ключа, который известен только вашему веб-API. Он хешируется в токене JWT, который вы создали для потребителя API. Каждый запрос с токеном JWT будет проверяться, если секретный ключ от клиента совпадает с секретом, хранящимся в вашем API.

Maciejek 07.12.2018 09:47

Другие вопросы по теме