Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DWX2021 - Hier kommst Du ned rein. ASP.NET Core APIs und Angular Security mit Azure

DWX2021 - Hier kommst Du ned rein. ASP.NET Core APIs und Angular Security mit Azure

Schwachstellen in Software sind (leider) allgegenwärtig und die Zahl der Angriffe steigt kontinuierlich an. Daher ist es unabdingbar, dass die Software richtig geschützt wird. Das Thema Security scheint aber vielen Entwicklern viel zu mühsam und komplex zu sein. In unseren Projekten stellen wir immer wieder fest, dass das Thema Security nur mangelhaft oder gar nicht berücksichtigt wurde. Diese Session zeigt auf, wie Authentication und Authorization in einer Angular Applikation mit einem ASP.NET Core Backend implementiert werden kann. Wir zeigen, was alles beachtet werden muss und was es mit Standards wie OAuth und OpenID Connect so auf sich hat.

Manuel Meyer

June 30, 2021
Tweet

More Decks by Manuel Meyer

Other Decks in Technology

Transcript

  1. thomasgassmann.net
    manuelmeyer.net
    @gassmannT
    @manumeyer1
    Du kommst hier ned rein!
    ASP.NET Core APIs und Angular Security mit Azure
    Manuel Meyer, Thomas Gassmann
    Developer Week 2021

    View full-size slide

  2. Manuel Meyer
    helps customers:
    • to kick-start the Azure journey.
    • to architect, implement and optimize their
    Azure Solutions
    www.manuelmeyer.net
    www.azurezurichusergroup.com
    @manumeyer1

    View full-size slide

  3. Thomas Gassmann
    helps customers:
    • to architect and implement their business
    applications
    • with the migration of large application
    www.thomasgassmann.net
    @gassmannT

    View full-size slide

  4. Agenda
    ▪ Wieso diese Session?
    ▪ OAuth 2.0 & OpenID Connect
    ▪ Zielarchitektur
    ▪ Demo

    View full-size slide

  5. Wieso diese Session?

    View full-size slide

  6. Security?
    https://informationisbeautiful.net/visualizations/worlds-biggest-data-breaches-hacks/
    Klar doch!!!

    View full-size slide

  7. OAuth?
    Lösung gefunden!
    Das Ding läuft!

    View full-size slide

  8. OAuth?
    Du Depp hast es
    genau falsch rum
    gemacht und NIX
    verstanden!
    Der nächste Blog Post:
    GAR NIX
    VERSTANDEN!!!

    View full-size slide

  9. OAuth?
    OAuth 2.0
    OIDC
    Resource Server
    Token
    SAML
    Delegation
    Claims
    Implicit Flow
    Code Flow
    Code Challenge
    PKCE
    Identity Server
    Resource

    View full-size slide

  10. OAuth 2.0 & OpenID Connect

    View full-size slide

  11. OAuth 2.0 Herausforderungen
    ▪ Die Spezifikation ist unvollständig bzw. zu offen
    ▪ Es gibt viele unterschiedliche Implementierungen
    ▪ Viele neue Begriffe und Konzepte
    ▪ Die Authorization Flows sind komplex
    ▪ Es gibt 1 Million verschiedene Meinungen zum Thema.

    View full-size slide

  12. OAuth 2.0
    ▪ IETF
    ▪ RFC 6749
    ▪ 75 Seiten
    ▪ Von 2012
    https://datatracker.ietf.org/doc/html/rfc6749

    View full-size slide

  13. In der Zeit vor OAuth
    Resource
    Owner
    Client
    (Application)
    Resource

    View full-size slide

  14. Probleme?
    ▪ Dein Passwort ist geheim!
    ▪ Mit dem Passwort kann die Client-App auf ALLES zugreifen
    ▪ Der Resource Owner gibt die Kontrolle aus der Hand
    OAuth löst diese Probleme. Aber:
    ▪ OAuth macht NUR die Authorization
    ▪ OAuth wurde erfunden für die Delegated Authorization.

    View full-size slide

  15. OAuth 2.0 Protocol Flow for
    Delegated Authorization
    Resource
    Resource
    Owner
    Client
    (Application)

    View full-size slide

  16. OAuth 2.0 Protocol Flow
    Resource
    Owner
    Client
    (Application)
    Resource

    View full-size slide

  17. Resource Owner Consent

    View full-size slide

  18. OAuth Scopes
    ▪ Definieren auf was ein Resource Owner Zugriff zulassen kann
    ▪ Format: &
    ▪ -> Der Resource Owner (Mensch) muss die Scopes verstehen
    DwxAPI
    api://dwxapi/speakers.read
    api://dwxapi/speakers.write
    api://dwxapi/sessions.read
    api://dwxapi/sessions.write
    api://dwxapi/rooms.read
    api://dwxapi/rooms.write
    Gmail
    https://www.googleapis.com/auth/gmail.compose
    https://www.googleapis.com/auth/gmail.send
    https://www.googleapis.com/auth/gmail.settings

    View full-size slide

  19. OAuth 2.0 Protocol Flow for
    Delegated Authorization
    Resource
    Resource
    Owner
    Client
    (Application)

    View full-size slide

  20. OAuth 2.0 Protocol Flow
    App
    Person
    API
    Token
    Service
    https://datatracker.ietf.org/doc/html/rfc6749

    View full-size slide

  21. OAuth 2.0 Flows?
    ▪ Client Credential Flow
    ▪ Authorization Code Flow
    ▪ Authorization Code Flow with PKCE
    ▪ Device Code Flow
    ▪ Refresh Token Flow
    ▪ Resource Owner Password
    Credential Flow ROPC
    ▪ Implicit Flow.

    View full-size slide

  22. OAuth 2.0 Flows?
    ▪ Client Credential Flow
    -> Machine-to-Machine, no user
    ▪ Authorization Code
    Flow
    ▪ Authorization Code Flow
    with PKCE
    ▪ Device Code Flow
    -> No keyboard, no browser
    (Azure CLI, Apple TV)
    ▪ (Refresh Token Flow)
    -> included in the
    Authorization Code Flows
    ▪ Resource Owner Password
    Credential Flow ROPC
    ▪ Implicit Flow
    Legacy Flows (Do NOT use)
    Special Flows

    View full-size slide

  23. OAuth 2.0 Flows?
    ▪ Client Credential Flow
    -> Machine-to-Machine, no user
    ▪ (Authorization
    Code Flow)
    ▪ Authorization Code Flow
    with PKCE
    ▪ Device Code Flow
    -> No keyboard, no browser
    (Azure CLI, Apple TV)
    ▪ (Refresh Token Flow)
    -> included in the
    Authorization Code Flows
    ▪ Resource Owner Password
    Credential Flow ROPC
    ▪ Implicit Flow
    Legacy Flows (Do NOT use)
    Special Flows

    View full-size slide

  24. OAuth 2.0 Authorization Code Flow
    Resource
    Resource
    Owner
    Client
    (Application)
    Darf ich die Daten von Manu lesen (Scopes[])?
    Authorization
    Server
    Klaro («auth code»)
    Access Token Request («auth code» & «secret»)
    Zugriff (Access Token)
    Access Token
    Daten
    1
    2
    3

    View full-size slide

  25. OpenID Connect (OIDC)
    OAuth 2.0 = (Delegated) Authorization
    OpenID Connect = Authentication

    View full-size slide

  26. OpenID Connect (OIDC)
    Ist ein Authentifizierungsstandard, der auf OAuth aufbaut.
    OIDC ergänzt die OAuth Spezifikation und ist spezifischer.
    Oauth 2.0 (Authz)
    ▪ ID Token (Login & Profile)
    ▪ Token Format: JWT (say «JOT»)
    ▪ Standard Scopes (openid, profile,
    email, address)
    ▪ Standard Claims (e.g.
    family_name).
    OIDC (Authn)
    ▪ Access/Refresh Tokens
    ▪ Token Format: any
    ▪ Scopes: any
    ▪ Claims: any

    View full-size slide

  27. OAuth 2.0 Authorization Code Flow
    Resource
    Resource
    Owner
    Client
    (Application)
    Authorization
    Server
    Klaro («auth code», «ID Token»)
    Access Token Request («auth code» & «secret»)
    Zugriff (Access Token)
    Access Token
    Daten
    Darf ich die Daten von Manu lesen («scopes[]»)
    1
    3
    4
    2
    Login & consent

    View full-size slide

  28. Schwachstellen in Oauth 2.0
    Resource
    Resource
    Owner
    Client
    (Application)
    Authorization
    Server
    Klaro («auth code», «ID Token»)
    Access Token Request («auth code» & «secret»)
    Zugriff (Access Token)
    Access Token
    Daten
    Darf ich die Daten von Manu lesen («scopes[]»)
    1
    3
    4
    2
    Login & consent

    View full-size slide

  29. Public Client vs. Confidential Client
    Public Client
    ▪ Kann ein Secret NICHT
    sicher speichern
    ▪ Browser Apps (SPAs),
    Mobile Apps, Desktop
    Apps
    Confidential Client
    ▪ Kann ein Secret sicher
    speichern
    ▪ Klassische Web Apps
    mit Server Side
    Rendering (ASP.NET,
    etc.)
    Lösung:
    Implicit Flow (legacy)
    Authorization Code flow with PKCE.

    View full-size slide

  30. OAuth 2.0 Authorization Code Flow
    Resource
    Resource
    Owner
    Client
    (Application)
    Authorization
    Server
    Klaro («auth code»)
    Access Token Request («auth code» & «secret»)
    Zugriff (Access Token)
    Access Token
    Daten
    Darf ich die Daten von Manu lesen («scopes[]»)
    1
    3
    4
    2
    Login & consent

    View full-size slide

  31. Implicit Flow (Legacy = Nicht verwenden!)
    Resource
    Resource
    Owner
    Client
    (Application)
    Darf ich die Daten von Manu lesen?
    Authorization
    Server
    Klaro («access token»)
    Zugriff (Access Token)
    Daten
    1
    3
    2
    Login & consent

    View full-size slide

  32. PKCE (say “Pixie”)
    Proof Key for Code Exchange (Alternative zum Implicit Flow)
    1. Der Client generiert ein «Secret» ad-hoc und schickt es als Hashwert
    (code_challenge) an den Authorization Server
    2. Der Authorization Server speichert diesen Hashwert
    3. Wenn der Client einen Access Token anfordert muss er den Hashwert
    mitschicken
    4. Der Authorization Server vergleicht den Hashwert mit dem gespeicherten
    und schickt bei Übereinstimmung ein Access Token zurück.
    PKCE stellt sicher, dass der client, welcher den Access Token bestellt hat, der
    gleiche Client ist welcher die Authentifizierung gemacht hat!

    View full-size slide

  33. Auth Code with PKCE
    Resource
    Resource
    Owner
    Client
    (Application)
    Darf ich die Daten von Manu lesen?
    Authorization
    Server
    Klaro («auth code»)
    Access Token Request («auth code» & «secret»)
    Zugriff (Access Token)
    Access Token
    Daten
    1 2
    4
    Login & consent
    3
    +code_challenge
    +code_challenge

    View full-size slide

  34. JWT Tokens
    ▪ OIDC - ID Token: Who is the user?
    ▪ OAuth 2.0 - Access Token: The user is allowed to
    access scopes a,b,c on resource server «DWXApi».
    ▪ OAuth 2.0: Refresh Token: Can be used to renew an
    Access Token
    ▪ Tokens sind kryptografisch signiert aber nicht
    verschlüsselt.
    Tooling: https://jwt.ms.

    View full-size slide

  35. Zielarchitektur

    View full-size slide

  36. Client
    Resource
    Owner
    Azure AD
    API
    Architektur

    View full-size slide

  37. Konfiguration Azure

    View full-size slide

  38. Konfiguration Azure

    View full-size slide

  39. Konfiguration Azure

    View full-size slide

  40. Konfiguration Azure

    View full-size slide

  41. Konfiguration Azure

    View full-size slide

  42. ASP.NET Core
    ▪ Nuget Package «Microsoft.Identity.Web»
    ▪ Konfiguration hinzufügen

    View full-size slide

  43. ASP.NET Core
    ▪ ASP.NET Core Middleware: Service hinzufügen

    View full-size slide

  44. ASP.NET Core
    ▪ Attribut hinzufügen

    View full-size slide

  45. DEMO
    ASP.NET Core

    View full-size slide

  46. Angular
    ▪ Es gibt viele npm Pakete für Angular. Z.B.
    ▪ @azure/msal-angular (Microsoft)
    ▪ angular-oauth2-oidc (Manfred Steyer)
    ▪ angular-auth-oidc-client (Damien Bowden & Fabian
    Gosebrink)

    View full-size slide

  47. Angular
    ▪ npm Paket installieren / hinzufügen

    View full-size slide

  48. Angular
    ▪ Konfiguration anpassen

    View full-size slide

  49. DEMO
    Angular
    https://github.com/gassmannT/ngCoreSecurity

    View full-size slide

  50. Zusammenfassung
    ▪ OAuth 2.0 und OpenID kommen im
    Doppelpack
    ▪ Authorization Code with PKCE ist der
    empfohlene Flow für Web Apps
    ▪ Die Implementierungsdetails übernehmen die
    Libraries
    ▪ Trotzdem müssen die Konzepte verstanden
    werden.

    View full-size slide

  51. Thank you!
    Manuel Meyer
    www.manuelmeyer.net
    @manumeyer1
    [email protected]
    Thomas Gassmann
    www.thomasgassmann.net
    @gassmannT
    [email protected]
    Ranjid

    View full-size slide