Używam .net roszczenia główne podczas uwierzytelniania użytkownika. W naszym systemie użytkownik ma wiele uprawnień (może mieć do 70).Dodawanie wielu wartości do 1 roszczenia użytkownika przy użyciu ciągu JSON
Teraz zamiast wysyłać zapytania do bazy danych przy każdym żądaniu, które robi użytkownik, pomyślałem, że dobrze byłoby przechowywać uprawnienia jako roszczenie. Próbowałem przechowywać każde pozwolenie jako oddzielne roszczenie, ale nawet uzyskanie 10 uprawnień znacznie zwiększa rozmiar tokena.
Więc zamiast dodawać 1 wniosek o 1 pozwolenie, zastanawiałem się, czy byłoby inaczej, gdybym dodał wszystkie uprawnienia do 1 roszczenia, i to robi. Zachowuje niewielki rozmiar tokena, ale mam uprawnienia, których potrzebuję.
Teraz, aby to zrobić, musiałem przekonwertować wszystkie moje uprawnienia z tablicy, na ciąg JSON, a następnie zapisać je jako moje roszczenie. Aby uzyskać roszczenie, mogę deserializować łańcuch z powrotem do tablicy i wcale nie będę musiał wysyłać zapytania do bazy danych.
Czy można to zrobić, czy jest to bardzo zła praktyka? Czy robię tykanie bomby zegarowej i wkrótce to się rozwali?
Przykładowy kod tutaj
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
// get user permissions
var permissions = await _permissionService.GetAllAsync(user);
// create list of all permissions
List<object> claimPermissions = new List<object>();
foreach (var item in permissions)
{
claimPermissions.Add(new
{
Action = item.Action,
Type = item.Type
});
}
// convert list to json
var json = Newtonsoft.Json.JsonConvert.SerializeObject(claimPermissions);
// add claim
identity.AddClaim(new Claim("Permissions", json));
Czy ktoś ma jakieś opinie na ten temat? – Gillardo
Chciałbym, aby ktoś odpowiedział na pytanie. Zapomnij o części Permissions i weź ją jako 70+ przedmiotów. Czy to byłoby złe Ćwiczenie? – Mike