@@ -22,51 +22,81 @@ Interaction schema
2222
2323 @startuml
2424 title DummyAuthProvider
25- participant "Client "
25+ participant "Frontend "
2626 participant "Backend"
27+ participant "Keycloak"
28+
29+ == Frontend Authentication at Keycloak ==
30+
31+ Frontend -> Backend : Request endpoint with authentication (/v1/locations)
32+
33+ Backend x-[#red]> Frontend: 401 with redirect url in 'details' response field
34+
35+ Frontend -> Keycloak : Redirect user to Keycloak login page
36+
37+ alt Successful login
38+ Frontend --> Keycloak : Log in with login and password
39+ else Login failed
40+ Keycloak x-[#red]> Frontend -- : Display error (401 Unauthorized)
41+ end
42+
43+ Keycloak -> Frontend : Callback to Frontend /callback which is proxy between Keycloak and Backend
44+
45+ Frontend -> Backend : Send request to Backend '/v1/auth/callback'
46+
47+ Backend -> Keycloak : Check original 'state' and exchange code for token's
48+ Keycloak --> Backend : Return token's
49+ Backend --> Frontend : Set token's in user's browser in cookies
50+
51+ Frontend --> Backend : Request to /v1/locations with session cookies
52+ Backend -> Backend : Get user info from token and check user in internal backend database
53+ Backend -> Backend : Create user in internal backend database if not exist
54+ Backend -[#green]> Frontend -- : Return requested data
55+
2756
2857 == GET v1/datasets ==
2958
59+
3060 alt Successful case
31- "Client " -> "Backend" ++ : access_token
61+ "Frontend " -> "Backend" ++ : access_token
3262 "Backend" --> "Backend" : Validate token
3363 "Backend" --> "Backend" : Check user in internal backend database
3464 "Backend" -> "Backend" : Get data
35- "Backend" -[#green]> "Client " -- : Return data
65+ "Backend" -[#green]> "Frontend " -- : Return data
3666
3767 else Token is expired (Successful case)
38- "Client " -> "Backend" ++ : access_token, refresh_token
68+ "Frontend " -> "Backend" ++ : access_token, refresh_token
3969 "Backend" --> "Backend" : Validate token
4070 "Backend" -[#yellow]> "Backend" : Token is expired
41- "Backend" --> "Backend " : Try to refresh token
71+ "Backend" --> "Keycloak " : Try to refresh token
4272 "Backend" --> "Backend" : Validate new token
4373 "Backend" --> "Backend" : Check user in internal backend database
4474 "Backend" -> "Backend" : Get data
45- "Backend" -[#green]> "Client " -- : Return data
75+ "Backend" -[#green]> "Frontend " -- : Return data
4676
4777 else Create new User
48- "Client " -> "Backend" ++ : access_token
78+ "Frontend " -> "Backend" ++ : access_token
4979 "Backend" --> "Backend" : Validate token
5080 "Backend" --> "Backend" : Check user in internal backend database
5181 "Backend" --> "Backend" : Create new user
5282 "Backend" -> "Backend" : Get data
53- "Backend" -[#green]> "Client " -- : Return data
83+ "Backend" -[#green]> "Frontend " -- : Return data
5484
5585 else Token is expired and bad refresh token
56- "Client " -> "Backend" ++ : access_token, refresh_token
86+ "Frontend " -> "Backend" ++ : access_token, refresh_token
5787 "Backend" --> "Backend" : Validate token
5888 "Backend" -[#yellow]> "Backend" : Token is expired
59- "Backend" --> "Backend " : Try to refresh token
60- "Backend" x-[#red]> "Client " -- : RedirectResponse can't refresh
89+ "Backend" --> "Keycloak " : Try to refresh token
90+ "Backend" x-[#red]> "Frontend " -- : RedirectResponse can't refresh
6191
6292 else Bad Token payload
63- "Client " -> "Backend" ++ : access_token, refresh_token
93+ "Frontend " -> "Backend" ++ : access_token, refresh_token
6494 "Backend" --> "Backend" : Validate token
65- "Backend" x-[#red]> "Client " -- : 307 Authorization error
95+ "Backend" x-[#red]> "Frontend " -- : 307 Authorization error
6696
6797 end
6898
69- deactivate "Client "
99+ deactivate "Frontend "
70100 @enduml
71101
72102
0 commit comments