.net Core API и Angular SPA - PullRequest
       12

.net Core API и Angular SPA

0 голосов
/ 06 декабря 2018

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

1 Ответ

0 голосов
/ 06 декабря 2018

Использование токенов 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, будет неавторизованным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...