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 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 Slide

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

    View Slide

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

    View Slide

  5. Wieso diese Session?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. OAuth?

    View Slide

  11. OAuth 2.0 & OpenID Connect

    View Slide

  12. 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 Slide

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

    View Slide

  14. OAuth 2.0

    View Slide

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

    View Slide

  16. 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 Slide

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

    View Slide

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

    View Slide

  19. Resource Owner Consent

    View Slide

  20. 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 Slide

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

    View Slide

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

    View Slide

  23. 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 Slide

  24. 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 Slide

  25. 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 Slide

  26. 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 Slide

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

    View Slide

  28. 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 Slide

  29. 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 Slide

  30. 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 Slide

  31. 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 Slide

  32. 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 Slide

  33. 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 Slide

  34. 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 Slide

  35. 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 Slide

  36. 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 Slide

  37. JWT Tokens

    View Slide

  38. Zielarchitektur

    View Slide

  39. Client
    Resource
    Owner
    Azure AD
    API
    Architektur

    View Slide

  40. Konfiguration Azure

    View Slide

  41. Konfiguration Azure

    View Slide

  42. Konfiguration Azure

    View Slide

  43. Konfiguration Azure

    View Slide

  44. Konfiguration Azure

    View Slide

  45. DEMO
    Azure

    View Slide

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

    View Slide

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

    View Slide

  48. ASP.NET Core
    ▪ Attribut hinzufügen

    View Slide

  49. DEMO
    ASP.NET Core

    View Slide

  50. 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 Slide

  51. Angular
    ▪ npm Paket installieren / hinzufügen

    View Slide

  52. Angular
    ▪ Konfiguration anpassen

    View Slide

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

    View Slide

  54. 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 Slide

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

    View Slide

  56. View Slide