Knak OAuth2 API

Endpoints that need to be implemented to support OAuth2

OpenAPI Specification

knak-oauth2-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  description: '## Overview

    An API specification to provide a Custom Sync Location in Knak.


    By implementing a service conforming to this API specification, you will be able to send asset data to your own service and have that service specify a sync location based on that data.


    ## Authentication

    Knak provides two options for authentication:

    - **Basic Authentication**: Knak will use Basic Authentication to authenticate with your API. You will just need to provide a username and password when configuring the integration.

    - **OAuth2**: Knak will use OAuth2 to authenticate with your API. You will need to implement endpoints under a specified authorization path to support this. The default path will be `/oauth/token` but you can provide a separate path when configuring the integration if you so choose. The flow used is the standard [Authorization Code Grant](https://tools.ietf.org/html/rfc6749#section-4.1).



    Knak will use the tokens generated to make requests from your service.


    ## Custom Sync Location

    When a user has a custom sync location configured and they have set up a sync restriction that leverages the custom sync location.

    Knak will call the `/knak-sync-location` (or your own specified path) endpoint with the asset data when an asset is synced. Your service should return a response with the sync location for the asset.


    When your service provides a sync location, Knak will use that location to display only the available sync location to the user.

    '
  version: V1
  title: Custom Sync Location API Reference Asset Custom Fieldsets OAuth2 API
  x-logo:
    url: https://s3.amazonaws.com/assets.knak.io/img/Knak-Logo-Medium.png
servers:
- url: https://yourService.com/your-sync-location-api
tags:
- name: OAuth2
  description: Endpoints that need to be implemented to support OAuth2
paths:
  /v1/oauth/token:
    post:
      tags:
      - OAuth2
      summary: Provide an Access Token
      description: If using an Oauth2 configured custom sync location integration Knak will call this endpoint to get an access token for your service. This is used to authenticate requests from Knak to your service.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                grant_type:
                  type: string
                  description: The grant type. This should be `authorization_code`.
                  example: authorization_code
                code:
                  type: string
                  description: The authorization code.
                  example: '123456'
                redirect_uri:
                  type: string
                  description: The redirect URI.
                  example: https://yourService.com/oauth/callback
                client_id:
                  type: string
                  description: The client ID.
                  example: your-client-id
                client_secret:
                  type: string
                  description: The client secret.
                  example: your-client-secret
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                    description: The access token.
                    example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
                  token_type:
                    type: string
                    description: The token type.
                    example: Bearer
                  expires_in:
                    type: integer
                    description: The number of seconds until the token expires.
                    example: 3600
        400:
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: The error message.
                    example: invalid_request
                  error_description:
                    type: string
                    description: A description of the error.
                    example: The request is missing a required parameter.
        401:
          description: Unauthorized
  /oauth2/authorize:
    get:
      tags:
      - OAuth2
      summary: OAuth2 Authorization
      description: <p> <a href='https://tools.ietf.org/html/rfc6749#section-3.1'>OAuth2 Authorize</a> endpoint. Will need to be configured in Knak. </p>
      parameters:
      - name: response_type
        in: query
        required: true
        schema:
          type: string
        description: The expected response type. This field should be `code`
        example: code
      - name: client_id
        in: query
        required: true
        schema:
          type: string
        description: The client ID (will need to be configured in Knak)
        example: '1948194'
      - name: redirect_uri
        in: query
        required: true
        schema:
          type: string
        description: The URI that expected authorization code should be sent to.
        example: https://enterprise.knak.io/account/integrations/custom-dam/authorize
      - name: state
        in: query
        required: true
        schema:
          type: string
        description: State
        example: za81js910s
      - name: scope
        in: query
        required: false
        schema:
          type: string
        description: 'Optional: if your application requires a set of scopes, they can be configured in Knak'
        example: read:assets
      responses:
        200:
          description: success
  /oauth2/token:
    post:
      tags:
      - OAuth2
      summary: OAuth2 Token
      description: "<p>\n<a href='https://tools.ietf.org/html/rfc6749#section-3.2'>OAuth2 Token</a>\nendpoint. Please note that this authorization url is configured in Knak.\nThe required parameters depend on the grant type requested:\n</p>\n\n<p>Authorization Code:</p>\n<ul>\n  <li>grant_type: authorization_code</li>\n  <li>client_id</li>\n  <li>client_secret</li>\n  <li>code</li>\n  <li>redirect_uri</li>\n</ul>\n\n<p>Refresh Token</p>\n<ul>\n  <li>grant_type: refresh_token</li>\n  <li>client_id </li>\n  <li>client_secret </li>\n  <li>refresh_token </li>\n</ul>\n"
      parameters:
      - name: tokenRequest
        in: body
        schema:
          $ref: '#/components/schemas/OAuth2TokenRequest'
      responses:
        200:
          description: success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OAuth2TokenResponse'
components:
  schemas:
    OAuth2TokenRequest:
      type: object
      required:
      - grant_type
      properties:
        grant_type:
          type: string
          description: The expected OAuth2 grant type. This field should be `authorization_code` or `refresh_token`
          example: authorization_code
        code:
          type: string
          description: 'The authorization code granted by the application. Used with grant type: authorization_code'
          example: 1as314rdfv291si2
        client_id:
          type: string
          description: The client ID
          example: '1948194'
        client_secret:
          type: string
          description: The client secret
          example: '1948194'
        redirect_uri:
          type: string
          description: 'The URI that expected authorization code was sent to. Used with grant type: authorization_code'
          example: https://enterprise.knak.io/account/integrations/custom-dam/authorize
        refresh_token:
          type: string
          description: 'The refresh token for the member that needs its token to be refreshed. Used with grant type: refresh_token'
          example: 'null'
    OAuth2TokenResponse:
      type: object
      properties:
        access_token:
          type: string
          description: The member's assigned access token
          example: wj1ds92jdowk132
        refresh_token:
          type: string
          description: 'The member''s assigned refresh token '
          example: ai298dj2od01kde
        expires_in:
          type: string
          description: The number of seconds in which the access token is valid
          example: '7200'
        token_type:
          type: string
          description: The type of access token
          example: ai298dj2od01kde