@startuml
autonumber
title "Authorization Code Flow"

participant "User Agent(Browser)" as UserAgent
participant "Client App" as Client
participant "Authorization Server" as AuthServer
participant "Resource Server" as ResourceServer


UserAgent -> Client : Open Web Page
UserAgent -> AuthServer : Redirect to AuthServer

UserAgent -> AuthServer : Uesr Login
AuthServer -> UserAgent : Redirect to Client Redirect URI \n w/ Auth Code

UserAgent -> Client: Redirect to Client Redirect URI \n w/ Auth Code
Client -> AuthServer: Send Auth Code \n & client_id & client_secret

AuthServer -> Client: Receive Access Token \n & optional Refresh Token

Client -> ResourceServer: Request resource \n w/Access Token

ResourceServer -> AuthServer: Verify access token
ResourceServer -> Client: Return resource

Client -> UserAgent: Display User's \n custom page
@enduml