Rejestracja przez google vs. role

Rejestracja przez google vs. role
FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad rok
  • Postów:684
0

Takie pytanie mam. Czy mogę jakoś powiązać np. określoną rolę z użytkownikiem zarejestrowanym przez google oauth?
No bo wiadomo. Coś takiego:

Kopiuj
[Authorize(Roles = ...)]
//...

Ale jeśli ktoś się zarejestruje przez google? Czy jemu też mogę jakoś przypisać jakąś rolę?
Edit: ech durny jestem, przecież każdy user (ten przez google także) ma id (pierwsza kolumna), i mogę przecież do tego id przypisać rolę. No tak czy siak temat wydaje mi się ciekawy.

edytowany 1x, ostatnio: finito
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:9 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2157
0

Wydaje mi się, że logowanie/rejestracja za pomocą Google, Facebook, czy Github stawiają użytkownika na tym samym poziomie dostępowym. Rejestrując się przez jeden z tych serwisów nie narzucasz na usera roli, wpada do "jednego worka", dopiero później jako administrator narzucasz mu role. Chcesz powiedzieć, że będziesz wisiał nad systemem i czekał, aż ktoś konto założy żeby mu szybko rolę przypisać? 🤔

ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
3

@finito:

A nie potrzebujesz pomedytować, czym się różni autentykacja od autoryzacji?
Z gramem teorii praktyka będzie jaśniejsza.

Istnienie konta, sprawdzenie czy ten który się podaje, rzeczywiscie nim jest to autentykacja, i tu miejsce serwisów zewnetzrnych.
Ale "co komu do jego" (jak mawiała moja babcia) to autoryzacja.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
WeiXiao
autentykacja ło panie
FI
@1a2b3c4d5e: Wiem, najwyższa pora bym to sobie wbił tam, gdzie potrzeba.
FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad rok
  • Postów:684
0

@AdamWox: Nie no, zgoda. Jednak przez chwilę wydawało mi się, że jak jest ta właściwość "ExternalLogin" w OnPost, to zaraz po niej można dać polecenie, które nadaje domyślnie rolę np. "user". Tylko właśnie nie jestem tego pewny czy to tak działa. Tzn. jak się kogoś rejestruje zwyczajnie, to wtedy może w rejestratorze dać takie polecenie domyślnego przypisania roli "user" , ale czy to zadziała też dla osoby rejestrującej się przez google to właśnie nie jestem pewny.

AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:9 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2157
0

Obawiam się, że przez Google nie rejestruje konta w twoim systemie. Mogę się mylić, bo nigdy tego nie potrzebowałem, ale to jest tylko po to, aby się zalogować. Zwyczajnie weryfikacja usera wykonuje się na serwerach Google, a nie u ciebie. Jeśli źle mówię, to proszę mnie poprawić ;-)

FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad rok
  • Postów:684
0

A nie potrzebujesz pomedytować, czym się różni autentykacja od autoryzacji?
Z gramem teorii praktyka będzie jaśniejsza.

Słusznie i faktycznie, przyznaję że dość często mi się myli jedno z drugim.

Istnienie konta, sprawdzenie czy ten który się podaje, rzeczywiscie nim jest to autentykacja, i tu miejsce serwisów zewnetzrnych.
Ale "co komu do jego" (jak mawiała moja babcia) to autoryzacja.

No mam nadzieję, że wreszcie kiedyś ... to zapamiętam.

FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad rok
  • Postów:684
0
AdamWox napisał(a):

Obawiam się, że przez Google nie rejestruje konta w twoim systemie. Mogę się mylić, bo nigdy tego nie potrzebowałem, ale to jest tylko po to, aby się zalogować. Zwyczajnie weryfikacja usera wykonuje się na serwerach Google, a nie u ciebie. Jeśli źle mówię, to proszę mnie poprawić ;-)

No tak, ale jak w takim razie (oraz czy to możliwe) zweryfikować "poziom możliwości" użytkownika zalogowanego przez google.
No bo niby microsoft wymyślił to rolowanie, ale po co mi ono, skoro 99% ludzi w sieci klika "google" i ma w d...pie.
A ja np. nie chcę by taki ktoś wszedł nagle mi w panel przeznaczony włącznie dla roli admin.

edytowany 1x, ostatnio: finito
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:9 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2157
0

Systemy do "otwartego" logowania rzadko mają role w takim pojęciu w jakim ty próbujesz uzyskać. Masz dwa wyjścia, albo pakujesz każdego jako user i dajesz logowanie z Google, albo implementujesz role i ogarniasz wewnętrzną rejestracje/logowanie bez Google.

Do czego jest ten twój projekt? Może prościej będzie ciebie nakierować czy możesz dać Google, czy nie.

FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad rok
  • Postów:684
0

@AdamWox: Znaczy sorry wielkie, ale projekt i jego funkcja ... niestety nie mogę tego podać. Natomiast po przeczytaniu twoich odpowiedzi oraz po przemyśleniu sprawy ... może po prostu zrobię takie googlowe logowanie, a potem sam sprawdzę czy po zalogowaniu przez google mam dostęp
do panelu przeznaczonego dla roli admin lub user. I po jabłkach. Proste. Wtedy będę wiedział na 100. Nie?

SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:12 miesięcy
2
finito napisał(a):

No tak, ale jak w takim razie (oraz czy to możliwe) zweryfikować "poziom możliwości" użytkownika zalogowanego przez google.
No bo niby microsoft wymyślił to rolowanie, ale po co mi ono, skoro 99% ludzi w sieci klika "google" i ma w d...pie.
A ja np. nie chcę by taki ktoś wszedł nagle mi w panel przeznaczony włącznie dla roli admin.

Nawet jak logujesz użytkowników zewnętrznymi providerami to nie znaczy, że nie możesz trzymać w bazie reprezentacji konta użytkownika, a raczej prawie zawsze będziesz to trzymał. Musisz przecież znać jakiś identyfikator użytkownika, bo jak inaczej powiążesz go z obiektami w swoim systemie?

AdamWox
A w OAuth nie jest tak, że system łapie tylko jakiś "snapshot" usera, aby tylko wygenerować token, bo z Google przyszło authorization = true?
AdamWox
  • Rejestracja:ponad 7 lat
  • Ostatnio:9 minut
  • Lokalizacja:Jastrzębie-Zdrój
  • Postów:2157
1

Moim zdaniem to jest troszkę niebezpieczne, aby przypadkowy user mógł zalogować się Googlem i mieć możliwość zobaczenia panel admina 🤔

FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad rok
  • Postów:684
0
some_ONE napisał(a):
finito napisał(a):

No tak, ale jak w takim razie (oraz czy to możliwe) zweryfikować "poziom możliwości" użytkownika zalogowanego przez google.
No bo niby microsoft wymyślił to rolowanie, ale po co mi ono, skoro 99% ludzi w sieci klika "google" i ma w d...pie.
A ja np. nie chcę by taki ktoś wszedł nagle mi w panel przeznaczony włącznie dla roli admin.

Nawet jak logujesz użytkowników zewnętrznymi providerami to nie znaczy, że nie możesz trzymać w bazie reprezentacji konta użytkownika, a raczej prawie zawsze będziesz to trzymał. Musisz przecież znać jakiś identyfikator użytkownika, bo jak inaczej powiążesz go z obiektami w swoim systemie?

No więc właśnie sam to sobie 20 minut temu uprzytomniłem.

piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 dni
  • Postów:3277
2

Zależy czy chcesz zrobić całość po swojej stronie, czy wolisz oddać zarządzanie użytkownikami do Firebase. W pierwszym przypadku Google odpowiada jedynie za uwierzytelnianie a ty musisz obsłużyć autoryzację, w drugim całość może być po stronie Google. Dodatkowy plus, to łatwość integracji kolejnych dostawców tożsamości (FB itp.)
Oprócz Google Firebase możesz też rzucić okiem na Auth0, z innych nie korzystałem, autoryzację robiłem zawsze po swojej stronie, więc doczytaj w dokumentacji, czy nie plotę głupot o rolach.

FI
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad rok
  • Postów:684
0

Tak jeszcze na chwilę pociągnę temat. Ja po prostu się zastanawiam jak ogarnąć temat na zasadzie "komu wolno a komu nie wolno" mieć do czegoś dostęp. Jak zrobię normalną rejestrację z domyślnym przypisaniem roli zwykłego usera, a za seeduję wbudowanego admina, to wtedy wiadomo, że każdy kto się rejestruje i loguje będzie miał dostęp tylko do [Authorize(Roles = "User")] i po sprawie. Jednak jeśli owy zwykły "jeszcze nie zarejestrowany" user "się zarejestruje" przez google, to czy on "ma" dostęp do kodu, nad którym jest [Authorize(Roles = "User")] ??
Bo na chłopski rozum jak ktoś się loguje przez google, to do panelu admina się pewnie nie dostanie. Jednak co w takim razie z panelami dla roli User??
To mnie właśnie zastanawia. Ech, muszę chyba poczytać mocniej odpowiednie strony dokumentacji odnośnie OAuth, bo inaczej nic z tego nie będzie.
Bo mam nieodparte wrażenie, że po prostu czegoś tu nie rozumiem.

edytowany 1x, ostatnio: finito
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 dni
  • Postów:3277
1

@finito: Przecież wystarczy uznać, ze każdy użytkownik, który się uwierzytelnił za pomocą Google to "zwykły użytkownik". Jeżeli nie ma jeszcze konta w serwisie, to każesz mu uzupełnić czego tam potrzebujesz i wszystko. Kodem ci nie odpowiem, .NET nie moja bajka, ale musi tam być coś w rodzaju "identified", czy inne "signed"..
I jeszcze raz,
Całe IAM (Identity and Access Management) składa się z 3 podstawowych elementów:

  1. Uwierzytelnianie (authentication) potwierdzenie tożsamości użytkownika. To może dać ci Google bezpośrednio z Google API, musisz oczywiście zrobić implementację ich flow, czyli dorobić guzik, który przekieruje gdzieś tam, jak użytkownik się zaloguje to go przekieruje znowu na twoją witrynę, ale już z odpowiednim tokenem OAuth, tego tokena użyjesz, żeby zdobyć token krótkoterminowy itd...
  2. Autoryzacja (authorization). Wiesz już jaki to użytkownik, ale musisz skądś pobrać dane co może zrobić w systemie. Może to być model RBAC albo ADAC, pytasz o pierwszy (role). Gdzieś informacje o tym że typ ma nadaną role [X, Y, Z] musisz przechowywać.
  3. Kontrola dostępu - czyli aplikacja na podstawie roli || atrybutów użytkownika musi go gdzieś wpuścić, albo walnąć 403 w twarz.

I jadąc po kolei:

  1. To robić google. Sensowniej jest użyć czegoś bardziej złożonego, co pozwoli użyć Google, login/poassword, Facebook, Git.... Oczywiście możesz to też zaimplementować sam, albo użyć jakiegoś Keycloak, czy innego gotowego softu
  2. Tego już Google samo z siebie ci nie da. Możesz użyć jakiegoś gotowego rozwiązania SaaS (Firebase, Auth0), albo znowu Keycloak
  3. To zawsze jest rola aplikacji i trzeba to zaimplementować w kodzie, można oczywiście wspomóc się biblioteką. Możesz kontrolować wyłącznie role, ale w praktyce zawsze coś tam dodatkowo trzeba zrobić. Jeżeli masz to forum to np. nie chcesz, żeby ktoś z rolą user miał dostęp do wszystkich profili, więc musisz sprawdzić przynajmniej id użytkownika na poziomie dostępu do konkretnej encji.

Konkretne flow AIM są bardziej złożone, ale ogólnie:

  • uwierzytelniasz się, dostajesz token, który potwierdza tylko i wyłącznie twoją tożsamość
  • strzelasz do drugiego serwisu za pomocą tego tokena, jako zwrotka dostajesz kolejny token, który zawiera dodatkowe atrybuty, np. role
  • tokena z autoryzacją używasz do strzelania w konkretne endpointy, które na podstawie tego, co im dostarczasz wpuszczają cię, albo nie

Dzięki temu jak skonstruowane są tokeny, nie ma potrzeby, żeby usługi cokolwiek o sobie wiedziały, a jedynie potrafiły potwierdzić integralność dostarczonych tokenów.

Odpowiadając już konkretnie na:

Jednak jeśli owy zwykły "jeszcze nie zarejestrowany" user "się zarejestruje" przez google, to czy on "ma" dostęp do kodu, nad którym jest [Authorize(Roles = "User")] ??

Odpowiedź brzmi: zależy jak to zaimplementujesz. Google samo w sobie nie przechowuje żadnej roli w twojej aplikacji.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)