ownCloud
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Login Flow

Login Flow

The following sequence diagram describes the openid connect auth code flow. The eight numbered steps and notes correspond to the openid connect auth code flow steps. Example requests are based on the spec as well:

sequenceDiagram
    %% we have comments!! \o/
    %% this documents the login workflow
    %% examples taken from the oidc spec https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth
    %% TODO add PKCE, see https://developer.okta.com/blog/2019/08/22/okta-authjs-pkce#use-pkce-to-make-your-apps-more-secure
    participant user as User
    participant client as Client
    participant proxy as ocis-proxy
    participant idp as IdP
    participant idm as LibreIDM
    participant ldap as External User Directory

    user->>+client: What is the content of my home?
        client->>+proxy: PROPFIND 
no (or expired) auth Note over client,proxy: ocis needs to know the IdP that is
used to authenticate users. The
proxy will redirect unauthenticated
requests to that IdP. proxy-->>-client: 401 Unauthorized client->>+proxy: 1. The client starts a new openIDConnect Flow Note over client, proxy: GET /.well-known/openid-configuration proxy-->>-client: Return openidConnect configuration for the IdP client-->>client: 2. Client prepares an Authentication Request
containing the desired request parameters
and generates the code challenge (PKCE). client->>+idp: 3. Client sends the request and the code challenge to the Authorization Server. Note over client, idp: GET /authorize?
flow=oidc&response_type=code
&scope=openid%20profile%20email
&code_challenge=Y2SGoq9vtAp7YAavTaO0B550H_Rsj9DypiL7xZuFjOE
&code_challenge_method=S25&client_id=s6BhdRkqt3
&state=af0ifjsldkj
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb HTTP/1.1
Host: server.example.com Note over user, idp: 3. Authorization Server Authenticates the End-User. alt all users managed by idp/ocis idm idp->>+idm: LDAP query/bind idm-->>-idp: LDAP result Note over idp,ldap: In case users are managed
in an external ldap they have to be
autoprovisioned in the ocis IdM
when they are loggin in. else all users authenticated by an external idp idp->>+ldap: Lookup of the user in the directory ldap-->>-idp: Lookup result end idp-->>-user: Idp presents the user an authentication prompt. user->>+idp: 5. User authenticates and gives consent. idp-->>-client: 6. Authorization Server sends the End-User back
to the Client with an Authorization Code. Note over client, idp: HTTP/1.1 302 Found
Location: https://client.example.org/cb?
code=SplxlOBeZQQYbYS6WxSbIA&state=af0ifjsldkj client->>+idp: 7. Client requests a response using the
Authorization Code and the code verifier at the Token Endpoint. Note over client, idp: POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient.example.org
&code_verifier=a98ccbe253754259963e6e2b67b5a044929446d7a15046cc8e3194022ad061d9d667dce91876418d9e6fe9f54819332e idp->>+idp: 8. IdP checks the code verifier (PKCE) idp-->>-client: 9. Client receives a response that contains an
ID Token and Access Token in the response body.
If offline access is requested, the client also receives a refresh token. Note over client, idp: HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "SlAV32hkKG",
"token_type": "Bearer",
"refresh_token": "8xLOxBtZp8",
"expires_in": 3600,
"id_token": "a ... b.c ... d.e ... f" // must be a JWT
} client-->>client: 10. Client validates the ID token and
retrieves the End-User's Subject Identifier. client->>+proxy: PROPFIND
With access token proxy-->>-client: 207 Multi-Status client-->>-user: List of Files X, Y, Z ...