openapi: 3.0.0
info:
  version: '1.0.2'
  title: 'NRF OAuth2'
  description: |
    NRF OAuth2 Authorization.
    © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC).
    All rights reserved.
paths:
  /oauth2/token:
    post:
      summary: Access Token Request
      operationId: AccessTokenRequest
      tags:
        - Access Token Request
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/AccessTokenReq'
        required: true
      responses:
        '200':
          description: Successful Access Token Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessTokenRsp'
          headers:
            Cache-Control:
              $ref: '#/components/headers/cache-control'
            Pragma:
              $ref: '#/components/headers/pragma'
        '307':
          description: Temporary Redirect
        '400':
          description: Error in the Access Token Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessTokenErr'
          headers:
            Cache-Control:
              $ref: '#/components/headers/cache-control'
            Pragma:
              $ref: '#/components/headers/pragma'
        '401':
          $ref: 'TS29571_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29571_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29571_CommonData.yaml#/components/responses/404'
        '411':
          $ref: 'TS29571_CommonData.yaml#/components/responses/411'
        '413':
          $ref: 'TS29571_CommonData.yaml#/components/responses/413'
        '415':
          $ref: 'TS29571_CommonData.yaml#/components/responses/415'
        '429':
          $ref: 'TS29571_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29571_CommonData.yaml#/components/responses/500'
        '501':
          $ref: 'TS29571_CommonData.yaml#/components/responses/501'
        '503':
          $ref: 'TS29571_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29571_CommonData.yaml#/components/responses/default'
components:
  headers:
    cache-control:
      required: true
      schema:
        type: string
        enum:
          - no-store
    pragma:
      required: true
      schema:
        type: string
        enum:
          - no-cache
  schemas:
    AccessTokenReq:
      type: object
      required:
        - grant_type
        - nfInstanceId
        - scope
      properties:
        grant_type:
          type: string
          enum:
            - client_credentials
        nfInstanceId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
        nfType:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/NFType'
        targetNfType:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/NFType'
        scope:
          type: string
          pattern: '^([a-zA-Z0-9_-]+)( [a-zA-Z0-9_-]+)*$'
        targetNfInstanceId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
        requesterPlmn:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/PlmnId'
        targetPlmn:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/PlmnId'
    AccessTokenRsp:
      type: object
      required:
        - access_token
        - token_type
      properties:
        access_token:
          type: string
          description: JWS Compact Serialized representation of JWS signed JSON object (AccessTokenClaims)
        token_type:
          type: string
          enum:
            - Bearer
        expires_in:
          type: integer
        scope:
          type: string
          pattern: '^([a-zA-Z0-9_-]+)( [a-zA-Z0-9_-]+)*$'
    AccessTokenClaims:
      type: object
      required:
        - iss
        - sub
        - aud
        - scope
        - exp
      properties:
        iss:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
        sub:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
        aud:
          anyOf:
            - $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/NFType'
            - type: array
              items:
                $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
              minItems: 1
        scope:
          type: string
          pattern: '^([a-zA-Z0-9_-]+)( [a-zA-Z0-9_-]+)*$'
        exp:
          type: integer
        consumerPlmnId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/PlmnId'
        producerPlmnId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/PlmnId'
    AccessTokenErr:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          enum:
            - invalid_request
            - invalid_client
            - invalid_grant
            - unauthorized_client
            - unsupported_grant_type
            - invalid_scope
        error_description:
          type: string
        error_uri:
          type: string
externalDocs:
  description: 3GPP TS 29.510 V15.3.0; 5G System; Network Function Repository Services; Stage 3
  url: 'http://www.3gpp.org/ftp/Specs/archive/29_series/29.510/'