openapi: 3.0.3
info:
  title: ukabisプラットフォーム基盤API
  description: |
    ## ukabisプラットフォーム基盤API

    このAPIは以下の特徴を持ちます：
    - システム基盤として提供される不変のAPI
    - 認証等を含む
    - すべてのukabis APIで共通利用される

    ### 利用開始までの流れ

    1. 管理画面でベンダーシステムを登録
    2. ユーザー招待を受けてアカウント作成
    3. 各認証でトークンを取得
    4. APIエンドポイントを呼び出し
  version: 1.0.0
servers:
  - url: https://apiweb.ukabis.jp
    description: ベースとなるURL
paths:
  /Token:
    post:
      summary: ベンダーシステム認証
      operationId: getVendoerSystemToken
      description: 管理画面（adminweb）上でベンダーシステムごとに払い出される認証情報を使用して、ukabis独自のトークンを払い出します。
      security: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example:
                    access_token: eyJhbGciOiJodHRwOi8vd3d3LnczLm...hs1YlXb-Jw
                    token_type: bearer
                    expires_in: 43200
                properties:
                  access_token:
                    type: string
                    description: '"X-Authorization"ヘッダーに、発行されたトークン（文字列）のみを渡して使用します。'
                  token_type:
                    type: string
                  expires_in:
                    type: integer
              examples:
                成功:
                  value:
                    access_token: eyJhbGciOiJodHRwOi8vd3d3LnczLm...hs1YlXb-Jw
                    token_type: bearer
                    expires_in: 43200
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  erros:
                    type: string
              examples:
                接続情報の誤り:
                  value:
                    erros: client_id,client_secre
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                client_id:
                  type: string
                  description: 管理画面から発行される、クライアントID
                  default: ''
                client_secret:
                  type: string
                  description: 管理画面から任意の値で登録できる、クライアントシークレット
                  default: ''
                grant_type:
                  type: string
                  default: client_credentials
            examples:
              Example:
                value:
                  client_id: 03e17de6-4a5b-0159-3642-e9703c8222dc
                  client_secret: secretXXX0123?
                  grant_type: client_credentials
        description: ''
      tags:
        - Authentication
  /oauth2/v1/token:
    post:
      summary: OpenID認証
      operationId: getOpenIDConnectToken
      description: OCI上のドメインに対して、ユーザー個別のtokenを払い出します。
      servers:
        - url: >-
            https://idcs-789f098214a04eb4aaa7b60fb7dc3909.identity.oraclecloud.com
          description: OCIドメインURL
      security: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example:
                    access_token: >-
                      eyJ4NXQjUzI1NiI6ImtUMjFZd0FOVDNldW1fLU1Edm...Ts_lI3zEnB7TMYd-c46iFMRX1AmoFTa6GFw
                    token_type: Bearer
                    expires_in: 36000
                properties:
                  access_token:
                    type: string
                    description: '"Authorization"ヘッダーに、発行されたトークン（文字列）を"Bearer"として渡して使用します。'
                  token_type:
                    type: string
                  expires_in:
                    type: integer
              examples:
                成功:
                  value:
                    access_token: >-
                      eyJ4NXQjUzI1NiI6ImtUMjFZd0FOVDNldW1fLU1Edm...Ts_lI3zEnB7TMYd-c46iFMRX1AmoFTa6GFw
                    token_type: Bearer
                    expires_in: 36000
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  error_description:
                    type: string
                  ecid:
                    type: string
                x-examples:
                  Example 1:
                    error: invalid_grant
                    error_description: You entered an incorrect user name or password.
                    ecid: ilc7P1R_A00000000
              examples:
                接続情報の誤り:
                  value:
                    error: invalid_grant
                    error_description: You entered an incorrect user name or password.
                    ecid: ilc7P1R_A00000000
                パラメータ不足:
                  value:
                    error: invalid_request
                    error_description: The request contains invalid parameters or values.
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                client_id:
                  type: string
                  description: ukabisアプリのクライアントID（共通）
                  default: 4ff76c73770b42d3a786f2d7b4ceea4d
                client_secret:
                  type: string
                  description: ukabisアプリのクライアントシークレット（共通）
                  default: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
                username:
                  type: string
                  description: ユーザー招待を受けた際に登録したユーザー名（ユーザーID）
                  default: ''
                password:
                  type: string
                  description: ユーザー招待を受けた際に登録したパスワード
                  default: ''
                grant_type:
                  type: string
                  default: password
                scope:
                  type: string
                  default: b3f3d469-e244-4ddd-8510-2a04e47be547123
            examples:
              Example:
                value:
                  client_id: 5387f21b-43b9-cb93-9d1a-0d8d58d47dd9
                  client_secret: 667b3e1977ae09799d8dfdff7fb7c822
                  username: user_001
                  password: Passw0rd
                  grant_type: password
                  scope: account
        description: ''
      tags:
        - Authentication
components:
  schemas: {}
  parameters:
    X-Authorization:
      name: X-Authorization
      in: header
      required: true
      description: '{ベンダーシステム認証アクセストークン}'
      schema:
        type: string
    Authorization:
      name: Authorization
      in: header
      required: true
      description: Bearer {OpenID認証アクセストークン}
      schema:
        type: string
    X-Cache:
      in: header
      name: X-Cache
      schema:
        type: string
      required: false
      description: '"1"など、任意の文字列を指定することにより、キャッシュしたデータを無視してリポジトリから直接、データを取得することができます。'
      example: '1'
  securitySchemes:
    VendorSystemAuth:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://apiweb.ukabis.jp/Token
          scopes: {}
    OIDCAuth:
      type: openIdConnect
      openIdConnectUrl: https://idcs-789f098214a04eb4aaa7b60fb7dc3909.identity.oraclecloud.com
tags:
  - name: Authentication
    x-displayName: 認証
    description: |
      ukabisには、大きく分けて2つの認証が存在しています。

      * ベンダーシステム認証
        * 登録されたベンダーシステムごとの認証
      * OpenID認証
        * API呼び出しユーザーごとの認証
x-tagGroups:
  - name: Platform APIs
    tags:
      - Authentication
security:
  - VendorSystemAuth: []
  - OIDCAuth: []
