University of Zurich OAuth2 API

Authorization and token issuance

OpenAPI Specification

university-of-zurich-oauth2-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: SWITCH edu-ID OpenID Connect (UZH Federated Identity) Discovery OAuth2 API
  description: OpenID Connect / OAuth 2.0 provider operated by SWITCH edu-ID and used by the University of Zurich as its central federated identity. This OpenAPI document is derived faithfully from the published OpenID Connect Discovery document at https://login.eduid.ch/.well-known/openid-configuration and the matching JWKS endpoint. Only endpoints, parameters, scopes, and claims actually advertised by the discovery document are represented here. Authorization Code flow with PKCE (S256) is the supported interactive flow; refresh_token is supported for token renewal.
  version: '2026-06-03'
  contact:
    name: SWITCH edu-ID
    url: https://login.eduid.ch/
  x-uzh-usage: UZH services rely on SWITCH edu-ID for SAML/Shibboleth and OpenID Connect authentication. See https://www.zi.uzh.ch/en/support/identity-access/eduid-faq.html
servers:
- url: https://login.eduid.ch
  description: SWITCH edu-ID production issuer
tags:
- name: OAuth2
  description: Authorization and token issuance
paths:
  /idp/profile/oidc/authorize:
    get:
      tags:
      - OAuth2
      operationId: authorize
      summary: Authorization endpoint
      description: Initiates the OAuth 2.0 Authorization Code flow. PKCE (code_challenge with method S256) is supported. The only advertised response_type is "code" and response_mode may be query, fragment, or form_post.
      parameters:
      - name: response_type
        in: query
        required: true
        schema:
          type: string
          enum:
          - code
      - name: client_id
        in: query
        required: true
        schema:
          type: string
      - name: redirect_uri
        in: query
        required: true
        schema:
          type: string
          format: uri
      - name: scope
        in: query
        required: true
        description: Space-delimited scopes; must include "openid".
        schema:
          type: string
          example: openid profile email
      - name: state
        in: query
        required: false
        schema:
          type: string
      - name: nonce
        in: query
        required: false
        schema:
          type: string
      - name: code_challenge
        in: query
        required: false
        schema:
          type: string
      - name: code_challenge_method
        in: query
        required: false
        schema:
          type: string
          enum:
          - S256
      - name: response_mode
        in: query
        required: false
        schema:
          type: string
          enum:
          - query
          - fragment
          - form_post
      responses:
        '302':
          description: Redirect back to redirect_uri with an authorization code (or an error).
          headers:
            Location:
              schema:
                type: string
                format: uri
  /idp/profile/oidc/token:
    post:
      tags:
      - OAuth2
      operationId: token
      summary: Token endpoint
      description: Exchanges an authorization code for tokens or refreshes an access token. Supported grant types are authorization_code and refresh_token.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/TokenRequest'
      responses:
        '200':
          description: Token response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '400':
          description: OAuth 2.0 error response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OAuthError'
  /idp/profile/oauth2/introspection:
    post:
      tags:
      - OAuth2
      operationId: introspect
      summary: Token introspection endpoint (RFC 7662)
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - token
              properties:
                token:
                  type: string
                token_type_hint:
                  type: string
                  enum:
                  - access_token
                  - refresh_token
      responses:
        '200':
          description: Introspection result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntrospectionResponse'
  /idp/profile/oauth2/revocation:
    post:
      tags:
      - OAuth2
      operationId: revoke
      summary: Token revocation endpoint (RFC 7009)
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - token
              properties:
                token:
                  type: string
                token_type_hint:
                  type: string
                  enum:
                  - access_token
                  - refresh_token
      responses:
        '200':
          description: Token revoked (or already invalid)
components:
  schemas:
    TokenResponse:
      type: object
      required:
      - access_token
      - token_type
      properties:
        access_token:
          type: string
        token_type:
          type: string
          example: Bearer
        expires_in:
          type: integer
        scope:
          type: string
        id_token:
          type: string
          description: Signed JWT ID token (present when openid scope requested).
        refresh_token:
          type: string
    IntrospectionResponse:
      type: object
      properties:
        active:
          type: boolean
        scope:
          type: string
        client_id:
          type: string
        token_type:
          type: string
        exp:
          type: integer
        iat:
          type: integer
        sub:
          type: string
        aud:
          type: string
        iss:
          type: string
    OAuthError:
      type: object
      properties:
        error:
          type: string
        error_description:
          type: string
    TokenRequest:
      type: object
      required:
      - grant_type
      properties:
        grant_type:
          type: string
          enum:
          - authorization_code
          - refresh_token
        code:
          type: string
        redirect_uri:
          type: string
          format: uri
        code_verifier:
          type: string
        refresh_token:
          type: string
        client_id:
          type: string
        client_secret:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    oidc:
      type: openIdConnect
      openIdConnectUrl: https://login.eduid.ch/.well-known/openid-configuration