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