Api
Tämä projekti on API-palvelu, jota sovellukset voivat käyttää kirjautumispyyntöjen ja kirjautumisten hyväksymiseen.
Ei mitään monimutkaista: yksinkertainen palvelu, joka toteuttaa tiedonvälityksen sovelluksen A ja tunnistusvälineen B välillä.
Lähdekoodit
Asennus
Asp Net Core Api serverin asennus on aika suoraviivainen. Projektin voi hyvn alittaa rakentamalla toimitusketju tuotantopalvelimelle kuntoon. Noon silloin pääsee
helpommin Jatkuvan toimituksen toimitus malliin kiinni. Kun käännös julkaisu on automatisitu eikä enää sovelluksen raketamisen aikana tarvitse laittaa resurssena
asia miettimiseen ja ei tule yllätyksiä myöhemmässä vaiheessa. Siispä asennus on kuvattu seuraavalla sivulla Api palvelun toimitus ja asennus. Nginx-ympäristöön
Palvelin lähdekoodit
Projekti koostuu kolmesta osasta: Repository kirjautumispalveluden toteutus. Routes Api-rajapinnan toteutus. Program sitoo kasaan projektin ja pyörittää palvelinta.
Neljäs mutta tärkein on Shared moduli mikä pitää sisällään kaikki AikaLeima järjestelmän palveluissa käyttämät tietorakenteet ja niidän väliset viestit ja enumeraatiot.
Kirjautuminen on vain yksi osa aikaleima-järjestelmää.
graph LR
subgraph "Routes"
Caller[Api kutsut]
end
subgraph Repository
Services[Services-luokka]
Request[Request-objekti]
Response[Response-objekti]
DB[(Tietokanta)]
end
Caller -- Request --> Services
Services -- suorittaa operaation --> DB
DB -- tulokset --> Services
Services -- Response --> Caller
Repositoryn sisäinen rakenne
Koska metodeja on vähän ja ne koskee käytännössä yhtä taulua ei ole tarvetta jakaa niitä useampaan tiedostoon.
classDiagram
class Services {
:+IDbContextFactory~AppDbContext~ factory
+Services(IDbContextFactory~AppDbContext~factory)
}
classDiagram
class Services ["(Services.cs) partial Services"] {
+CreateAuthenticationAccountAsync() Task~Response~
+LoadAuthenticationCacheAsync() Task~Response~
+CreateAccountKeyAsync(Request request) Task~Response~
+ActivateAccountKeyAsync(Request request) Task~Response~
+SetAccountAuthorizerAsync(KeyRequest request) Task~Response~
+LoadAccountAsync(Request request) Task~AccountResponse~
+AuthorizerCheckAuthenticationStateAsync(Request request) Task~Response~
+AccountCheckStateAsync(Request request) Task~Response~
+AccountActivateAuthenticationAsync(Request request) Task~Response~
+AuthorizerSetAuthenticationStateAsync(KeyRequest request) Task~Response~
+PinCodeCheckAsync(KeyRequest request) Task~Response~
-GetAccountsAsync() Task~List~AccountResponse~~
+SetAccountAsync(AccountResponse request) Task~AccountResponse~
}
AppDbContext-luokan rakenne
Järjestelmä siältää tällä-hetkellä vain yhen taulun account.
classDiagram
class AppDbContext {
+Account: DbSet~Account~
AppDbContext(DbContextOptions~AppDbContext~options) : base(options)
}
class Account{
+ROWID:int
+SystemKeyKey:string
+Key:string
+AuthorizerKey:string
+State:string
+PinCode:string
+Url:string
}
Account "1" --o "n" AppDbContext
Routes
Routse on rajapinta ulopäin. rajapinna api-kutsujen nimet on esitelty shared luokassa. Nisä on pieni erikoisuus
ne on guid-stringejä. Tässä on ideana että julkinen apiurl ei kerro mitä oikein ollaan tekemässä ja sitten ei tule kijoitusvirheitä kun
Client ja server käyttävät samaa Shared-tiedoston määritystä.
sequenceDiagram
participant Asiakas
participant API
participant Services
%% 1. Uuden tunnistautumistilin luonti (GET) %%
Asiakas->>API: GET /CreateAuthenticationAccount
activate API
API->>Services: CreateAuthenticationAccountAsync()
activate Services
Services-->>API: Palauttaa uuden tilin avaimen (Response)
deactivate Services
API-->>Asiakas: Vastaus (Response)
deactivate API
%% 2. Tilin avaimen luonti (POST) %%
Asiakas->>API: POST /CreateAccountKey (Request)
activate API
API->>Services: CreateAccountKeyAsync(request)
activate Services
Services-->>API: Palauttaa luodun avaimen (Response)
deactivate Services
API-->>Asiakas: Vastaus (Response)
deactivate API
%% 3. Tilin avaimen aktivointi (POST) %%
Asiakas->>API: POST /ActivateAccountKey (Request)
activate API
API->>Services: ActivateAccountKeyAsync(request)
activate Services
Services-->>API: Palauttaa aktivoinnin tilan (Response)
deactivate Services
API-->>Asiakas: Vastaus (Response)
deactivate API
%% 4. Tunnistautujan asettaminen tilille (POST) %%
Asiakas->>API: POST /SetAccountAuthorizer (KeyRequest)
activate API
API->>Services: SetAccountAuthorizerAsync(request)
activate Services
Services-->>API: Palauttaa onnistumisen (Response)
deactivate Services
API-->>Asiakas: Vastaus (Response)
deactivate API
%% 5. Tilin tietojen lataus (POST) %%
Asiakas->>API: POST /LoadAccount (Request)
activate API
API->>Services: LoadAccountAsync(request)
activate Services
Services-->>API: Palauttaa tilin tiedot (AccountResponse)
deactivate Services
API-->>Asiakas: Vastaus (AccountResponse)
deactivate API
%% 6. Tilin tilan tarkistus (POST) %%
Asiakas->>API: POST /AccountCheckState (Request)
activate API
API->>Services: AccountCheckStateAsync(request)
activate Services
Services-->>API: Palauttaa tilin tilan (Response)
deactivate Services
API-->>Asiakas: Vastaus (Response)
deactivate API
%% 7. Tunnistautumisen aktivointi tilille (POST) %%
Asiakas->>API: POST /AccountActivateAuthentication (Request)
activate API
API->>Services: AccountActivateAuthenticationAsync(request)
activate Services
Services-->>API: Palauttaa onnistumisen (Response)
deactivate Services
API-->>Asiakas: Vastaus (Response)
deactivate API
%% 8. Tunnistautujan tilan tarkistus (POST) %%
Asiakas->>API: POST /AuthorizerCheckAuthenticationState (Request)
activate API
API->>Services: AuthorizerCheckAuthenticationStateAsync(request)
activate Services
Services-->>API: Palauttaa tunnistautumisen tilan (Response)
deactivate Services
API-->>Asiakas: Vastaus (Response)
deactivate API
%% 9. Tunnistautumisen tilan asetus (POST) %%
Asiakas->>API: POST /AuthorizerSetAuthenticationState (KeyRequest)
activate API
API->>Services: AuthorizerSetAuthenticationStateAsync(request)
activate Services
Services-->>API: Palauttaa onnistumisen (Response)
deactivate Services
API-->>Asiakas: Vastaus (Response)
deactivate API
%% 10. PIN-koodin tarkistus (POST) %%
Asiakas->>API: POST /PinCodeCheck (KeyRequest)
activate API
API->>Services: PinCodeCheckAsync(request)
activate Services
Services-->>API: Palauttaa tarkistuksen tuloksen (Response)
deactivate Services
API-->>Asiakas: Vastaus (Response)
deactivate API