Cześć.
Mam kilka pytań, próbuję zrobić prostą apkę (co ona robi nie jest istotne) w której chcę umożliwić logowania się użytkowników z różnymi rolami. Jest to temat dla mnie nowy, ogólny zamysł rozumiem, jednak jak to się dzieje w tle dzieje się jest nieco dla mnie zagadką. Ale po kolei.
Po stronie ASP.NET CORE chciałbym użyć JWT mniej więcej w takiej konfiguracji jak w linku poniżej :
Jednak zastanawiam się skąd atrybuty : [Authorize] [Authorize(Roles="rola")] skąd rozpoznają, że użytkownik jest zalogowany?
Wydaje mi się (jednak proszę o poprawienie), że Autoryzacja jest rozpoznawana na podstawie wygenerowanego tokenu, który jest ustawiony w appsettings i w tej sekcji w pliku Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
// configure strongly typed settings objects
var appSettingsSection = Configuration.GetSection("AppSettings");
services.Configure<AppSettings>(appSettingsSection);
// configure jwt authentication
var appSettings = appSettingsSection.Get<AppSettings>();
var key = Encoding.ASCII.GetBytes(appSettings.Secret);
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false
};
});
// configure DI for application services
services.AddScoped<IUserService, UserService>();
}
Jednak nie jestem co do tego pewny.
Czy tak jak w linku w którym podałem, token powienien być umieszczony w header przy każdym requescie (każdym w którym jakaś autoryzacja będzie wymagana?).
Jak sprawdzana jest rola w takim razie? Poprzez jakieś pole "role" w User, które jest przesyłane wraz z tokenem?
Ogólnie zastanawiam się co musi umieszczane i gdzie przy każdym requeście by backend rozpoznał użytkownika i jego role przy użyciu atrybutów : [Authorize] [Authorize(Roles="rola")] przy użyciu JWT Token.
Do frontu używam Reacta, jednak wydaję mi się, że ot nie ma znaczenia, tak długo jak jest to technologia umożliwiająca wysyłanie zapytań.
Pozdrawiam ;)