Swift Academy · Oppitunti

Middleware ja autentikointi

Lisää poikittaista logiikkaa ja suojaa reitit.

Oppitunti 4/413 vaihetta

Middleware ja autentikointi on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mikä middleware on

Middleware toimii saapuvan pyynnön ja reittikäsittelijän välissä ja voi tarkastella tai muuttaa sekä pyyntöä että vastausta. Se sopii erinomaisesti lokitukseen, CORS-toimintoihin, virheenkäsittelyyn ja todennukseen.

import Vapor

Middleware-protokolla

Mukautettu middleware toteuttaa AsyncMiddleware-protokollan ja metodin respond(to:chainingTo:). Suorittakaa tarvittavat toimet ja kutsukaa sitten next.respond(to:)-metodia ketjun jatkamiseksi.

struct LogMiddleware: AsyncMiddleware {
    func respond(to req: Request, chainingTo next: AsyncResponder) async throws -> Response {
        req.logger.info("Incoming: " + req.url.path)
        return try await next.respond(to: req)
    }
}

Middelwaren rekisteröiminen yleisesti

Lisätkää middleware kohteeseen app.middleware, jotta sitä käytetään jokaisessa pyynnössä. Järjestyksellä on merkitystä — middleware suoritetaan lisäysjärjestyksessä.

app.middleware.use(LogMiddleware())

Sisäänrakennettu middleware

Vapor sisältää hyödyllisiä middleware-komponentteja: ErrorMiddleware muuntaa heitetyt virheet vastauksiksi, FileMiddleware tarjoaa staattisia tiedostoja ja CORSMiddleware käsittelee alkuperien välisiä pyyntöjä.

let cors = CORSMiddleware(configuration: .default())
app.middleware.use(cors)

Reittikohtainen middleware

Ottakaa middleware käyttöön vain tietyillä reiteillä ryhmittelemällä ne sen kanssa. Ryhmän sisällä olevat reitit suojataan, muut eivät.

let protected = app.grouped(LogMiddleware())
protected.get("dashboard") { req in "Secret dashboard" }

Todennuksen käsitteet

Vaporin todennusjärjestelmässä on kaksi osaa: Authenticatable-malli (käyttäjänne) ja Authenticator-middleware, joka tarkistaa tunnistetiedot ja tallentaa käyttäjän pyyntöön.

final class AppUser: Model, Content, Authenticatable {
    static let schema = "users"
    @ID(key: .id) var id: UUID?
    @Field(key: "username") var username: String
    @Field(key: "password_hash") var passwordHash: String
    init() {}
}

Basic-todentajan kirjoittaminen

AsyncBasicAuthenticator käsittelee HTTP Basic -todennusta. Toteuttakaa authenticate(basic:for:): hakekaa käyttäjä, tarkistakaa salasana ja kutsukaa onnistuneen todennuksen jälkeen req.auth.login(user)-metodia.

struct UserAuthenticator: AsyncBasicAuthenticator {
    func authenticate(basic: BasicAuthorization, for req: Request) async throws {
        guard let user = try await AppUser.query(on: req.db)
            .filter(\.$username == basic.username).first() else { return }
        if try Bcrypt.verify(basic.password, created: user.passwordHash) {
            req.auth.login(user)
        }
    }
}

Salasanojen hajauttaminen Bcryptillä

Älkää koskaan tallentako salasanoja selväkielisinä. Vapor sisältää Bcrypt-toiminnon, jolla salasanat hajautetaan rekisteröitymisen yhteydessä ja tarkistetaan kirjautumisen yhteydessä. Hajautus on yksisuuntainen; tarkistuksessa ehdokasta verrataan tallennettuun hajautusarvoon.

let hash = try Bcrypt.hash("s3cret")
let ok = try Bcrypt.verify("s3cret", created: hash) // true

Reittien suojaaminen Guardilla

Yhdistäkää todentajaan AppUser.guardMiddleware(), joka hylkää todentamattomat pyynnöt 401-virheellä. Sijoittakaa suojatut reitit molempien taakse.

let protected = app.grouped(
    UserAuthenticator(),
    AppUser.guardMiddleware()
)
protected.get("me") { req -> String in
    let user = try req.auth.require(AppUser.self)
    return user.username
}

Todennetun käyttäjän lukeminen

Suojatussa käsittelijässä kirjautunut käyttäjä haetaan kutsumalla req.auth.require(_:)-metodia (heit­tää virheen, jos käyttäjää ei ole) tai req.auth.get(_:)-metodia (valinnainen). Näin tiedot voidaan rajata nykyiseen käyttäjään.

app.get("profile") { req -> String in
    let user = try req.auth.require(AppUser.self)
    return "Hello, " + user.username
}

Token-todennus

API-rajapinnoissa bearer-tokenit ovat yleisiä. Token-malli toteuttaa ModelTokenAuthenticatable-protokollan, jolloin Vapor voi tarkistaa Authorization: Bearer ... -otsakkeen ja ladata siihen liittyvän käyttäjän automaattisesti.

let tokenProtected = app.grouped(
    UserToken.authenticator(),
    AppUser.guardMiddleware()
)

Pikatarkistus: middleware ja todennus

Varmistakaa, että ymmärrätte asian.

Kertaus: middleware ja todennus

Opitte sieppaamaan pyynnöt ja suojaamaan ne:

  • Middleware (AsyncMiddleware) ympäröi pyynnöt; se voidaan rekisteröidä globaalisti tai reittiryhmäkohtaisesti.
  • Käyttäkää valmiita middleware-komponentteja, kuten ErrorMiddleware ja CORSMiddleware.
  • Tehkää käyttäjästä Authenticatable, kirjoittakaa Authenticator ja kutsukaa req.auth.login-metodia.
  • Tiivistäkää salasanat Bcrypt-algoritmilla, suojatkaa reitit guardMiddleware()-metodilla ja lukekaa käyttäjä req.auth.require-metodilla.
Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Middleware ja autentikointi” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Middleware ja autentikointi”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Middleware ja autentikointi”?

Lisää poikittaista logiikkaa ja suojaa reitit. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Middleware ja autentikointi”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Reititys ja pyyntöjen käsittely
  2. Sisältö ja JSON-koodaus
  3. Fluent ORM ja mallit
  4. Middleware ja autentikointi
← Takaisin: Swift Academy