Mam projekt usługi .NET Azure Mobile Services z niektórymi kontrolerami, które chcę zabezpieczyć za pomocą typowego atrybutu Authorize. Mogę utworzyć tabelę ról i tabelę UserProfiles oraz powiązać różnych użytkowników uwierzytelnionych przez Google, Facebook itp. Z rolami w mojej tabeli ról.Dodawanie niestandardowych ról do użytkownika usług mobilnych Azure (Google, Twitter, Facebook, Microsoft)
Moje pytanie brzmi: Jak dodać roszczenia ról do ServiceUsers po zakończeniu uwierzytelniania, ale przed uruchomieniem metody OnAuthorize filtra autoryzacji? Czy to możliwe?
Przykład tego, co chcę zrobić:
[Authorize(Roles = "admin")]
public async Task<IHttpActionResult> Put(int id, MyDto dto){...}
Szorstkie przykłady tabela:
Roles
id | name
1 | user
2 | admin
UserProfiles
id | externalLoginId | favoriteColor
1 | Google:<ServiceUser.Id> | blue
UserRoles (Linking Table)
roleId | userId
2 | 1
Edit:
Jedną z opcji może być tworzenie mój własny filtr działania przesłanianie filtru Autoryzuj atrybut i w metodzie OnAuthorize mogłem zapytać o tabele UserProfiles i Roles, aby uzyskać role dla bieżącego użytkownika, a następnie sprawdzić względem ról określonych w polu Authorize właściwość Roles obiektu, aby określić, czy użytkownik ma dostęp. Ale wydaje się, że powinno być miejsce wcześniej w potoku, które mogę przechwycić, aby dodać roszczenia ról do bieżącego użytkownika.
zajęło mi cały dzień wczoraj, ale w końcu przybył do rozwiązania poniżej. Próbowałem wszystkiego, od niestandardowego oprogramowania OWIN do niestandardowych LoginProviders i nie dostałem tego, czego chciałem. Mógłbym stworzyć własną niestandardową AuthorizationAttribute, ale ciągle myślałem, że musi być miejsce na wcześniejszym etapie, w którym mógłbym tylko dodać roszczenia do roli i po prostu móc używać zwykłego AuthorizeAttribute [Authorize (Roles = "User, Admin")]. Poniższe rozwiązanie osiąga ten cel. Ale teraz wiem więcej o wewnętrznych działaniach zestawów Microsoft.WindowsAzure. * Niż kiedykolwiek chciałem. :) –