mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
288 lines
No EOL
5.4 KiB
Markdown
288 lines
No EOL
5.4 KiB
Markdown
# Authentification
|
|
|
|
Le but du module d'authentification est de pouvoir facilement faire des blocks de code permettant une authentification personalisée. Il est possible de le faire grâce a cette architecture.
|
|
|
|
```plantuml
|
|
@startuml
|
|
|
|
package Backend {
|
|
class AuthManager{
|
|
+IAuthModule[] auths
|
|
#userInfos
|
|
|
|
-load()
|
|
-registerAuths()
|
|
+showAuths()
|
|
|
|
+authStatus()
|
|
+logIn(UserInfos)
|
|
+register(UserInfos)
|
|
+logOut()
|
|
}
|
|
|
|
interface IAuthModule{
|
|
+registerAuth()
|
|
+authenticate()
|
|
+register()
|
|
+showAuth()
|
|
}
|
|
|
|
class SimpleFormAuthModule{
|
|
|
|
}
|
|
|
|
class PassportAuthModule{
|
|
IPassportProviderDefinition[] providers
|
|
}
|
|
|
|
Interface IPassportProviderDefinition{
|
|
+name
|
|
+type
|
|
}
|
|
|
|
class OAuthPassportProvider{
|
|
+clientId
|
|
+clientSecret
|
|
+configUrl
|
|
+authorizeUrl
|
|
+tokenUrl
|
|
+userinfoUrl
|
|
+logoutUrl
|
|
+JWKSUrl
|
|
}
|
|
|
|
IAuthModule <|-- SimpleFormAuthModule
|
|
IAuthModule <|-- PassportAuthModule
|
|
IPassportProviderDefinition <|-- OAuthPassportProvider
|
|
|
|
AuthManager -> IAuthModule
|
|
PassportAuthModule -> IPassportProviderDefinition
|
|
}
|
|
|
|
package Frontend{
|
|
class AuthDrawer{
|
|
+IAuthVisual[] getAuthsVisual()
|
|
+drawAuths()
|
|
}
|
|
|
|
Interface IAuthVisual{
|
|
+draw()
|
|
}
|
|
|
|
class FormVisual{
|
|
+FormInput[] formInputs
|
|
}
|
|
|
|
interface FormInput{
|
|
+name
|
|
+label
|
|
+type
|
|
+value
|
|
}
|
|
|
|
AuthDrawer -> IAuthVisual
|
|
IAuthVisual <|-- FormVisual
|
|
FormVisual -> FormInput
|
|
}
|
|
|
|
@enduml
|
|
```
|
|
|
|
|
|
Le fonctionnement peut être expliqué avec les diagrammes suivants :
|
|
|
|
|
|
## Module : Passport Js
|
|
```plantuml
|
|
@startuml
|
|
|
|
box "Frontend"
|
|
participant User
|
|
Participant App
|
|
end box
|
|
|
|
box "Backend"
|
|
participant PassportAuthModule
|
|
participant Db
|
|
participant AuthManager
|
|
end box
|
|
|
|
box "Auth Server"
|
|
participant AuthServer
|
|
end box
|
|
|
|
User -> App : Get auth page
|
|
App -> User : auth page
|
|
|
|
User -> App : click OAuth button
|
|
App -> User : redirect to OAuth
|
|
|
|
User -> AuthServer: Login
|
|
AuthServer -> User: Redirect to Auth endpoint with token
|
|
|
|
User -> PassportAuthModule: Authenticate with token
|
|
|
|
PassportAuthModule -> AuthServer: get user info
|
|
AuthServer -> PassportAuthModule: userInfo
|
|
|
|
alt login
|
|
PassportAuthModule -> Db : fetch local userInfo
|
|
Db->PassportAuthModule: userInfo
|
|
PassportAuthModule -> PassportAuthModule: Merge userInfo definition
|
|
PassportAuthModule -> Db : update user profile
|
|
Db->PassportAuthModule: userInfo
|
|
end
|
|
|
|
alt register
|
|
PassportAuthModule -> Db : fetch local userInfo
|
|
Db->PassportAuthModule: null
|
|
PassportAuthModule -> Db : create user profile
|
|
Db->PassportAuthModule: userInfo
|
|
end
|
|
|
|
PassportAuthModule -> AuthManager : login(userInfos)
|
|
|
|
AuthManager -> User: Give refresh token + Redirect to page
|
|
User -> App: get /
|
|
App -> User: Show Authenticated /
|
|
@enduml
|
|
```
|
|
|
|
## Module : SimpleAuth
|
|
```plantuml
|
|
@startuml
|
|
|
|
box "Frontend"
|
|
participant User
|
|
Participant App
|
|
end box
|
|
|
|
box "Backend"
|
|
participant SimpleAuthModule
|
|
participant Db
|
|
participant AuthManager
|
|
end box
|
|
|
|
User -> App : Get auth page
|
|
App -> User : auth page
|
|
|
|
|
|
alt Login
|
|
User -> App : Send Login/Pass
|
|
|
|
App -> SimpleAuthModule: Send login/pass
|
|
|
|
SimpleAuthModule -> Db: get user info
|
|
Db->SimpleAuthModule: user info
|
|
SimpleAuthModule -> SimpleAuthModule: Validate Hash
|
|
end
|
|
|
|
alt register
|
|
User -> App : Send Username + Password + Email
|
|
|
|
App -> SimpleAuthModule: Send Username + Password + Email
|
|
|
|
SimpleAuthModule -> Db: get user info
|
|
Db -> SimpleAuthModule : null
|
|
|
|
SimpleAuthModule -> Db: put user info
|
|
end
|
|
|
|
SimpleAuthModule -> AuthManager: userInfo
|
|
AuthManager -> User: Give refresh token + Redirect to page
|
|
User -> App: get /
|
|
App -> User: Show Authenticated /
|
|
@enduml
|
|
```
|
|
|
|
## Comment les boutons sont affichés
|
|
```plantuml
|
|
@startuml
|
|
|
|
box "FrontEnd"
|
|
participant User
|
|
Participant FrontEnd
|
|
Participant AuthDrawer
|
|
end box
|
|
|
|
box "BackEnd"
|
|
participant API
|
|
participant AuthManager
|
|
participant Db
|
|
participant IAuthModule
|
|
end box
|
|
|
|
API -> API : load global configurations
|
|
|
|
create AuthManager
|
|
API -> AuthManager : instanciate with auth configurations
|
|
|
|
|
|
create IAuthModule
|
|
AuthManager -> IAuthModule : instanciate array
|
|
|
|
loop For each auth in auths
|
|
AuthManager -> IAuthModule : register
|
|
IAuthModule -> API : register routes
|
|
API -> IAuthModule : route registration confirmation
|
|
IAuthModule -> AuthManager : module registration confirmation
|
|
end
|
|
|
|
User -> FrontEnd : get login page
|
|
|
|
alt already logged in
|
|
FrontEnd -> User: redirected to authenticated page
|
|
end
|
|
|
|
FrontEnd -> AuthDrawer : get auth visual
|
|
AuthDrawer -> API : get auth form data
|
|
|
|
API -> AuthManager : get auth form data
|
|
|
|
|
|
loop For each auth in auths
|
|
AuthManager -> IAuthModule : get form data
|
|
IAuthModule -> AuthManager : form data
|
|
end
|
|
|
|
AuthManager -> API : auth fom data
|
|
API -> AuthDrawer : auth form data
|
|
|
|
AuthDrawer -> AuthDrawer : make auth html
|
|
AuthDrawer -> FrontEnd : auth HTML
|
|
FrontEnd -> User : show auth page
|
|
|
|
|
|
@enduml
|
|
```
|
|
|
|
## Comment les sessions sont conservées
|
|
```plantuml
|
|
@startuml
|
|
box "Frontend"
|
|
participant User
|
|
Participant App
|
|
end box
|
|
|
|
box "Backend"
|
|
participant AuthManager
|
|
participant IAuthModules
|
|
end box
|
|
|
|
App -> AuthManager : send refresh token
|
|
|
|
AuthManager -> IAuthModules: ForEach check if logged
|
|
IAuthModules -> AuthManager: is authenticated ?
|
|
|
|
alt one logged in
|
|
AuthManager -> App : send new token
|
|
end
|
|
|
|
alt all logged out
|
|
AuthManager -> App : send error
|
|
App -> App : destroy token
|
|
App -> User : redirect to login page
|
|
end
|
|
|
|
@enduml
|
|
``` |