The delete operation should be corrected as follows.

#-----------------------------------------------------

# Delete the global scope

#-----------------------------------------------------

    delete:

      security:

        - OAuth2Security:

          - apim:global_scope_manage

      summary: Delete a global scope

      description: |

        This operation can be used to delete an existing Global Scope
proving the Id of the scope.

      parameters:

        - $ref: '#/parameters/scopeId

      responses:

        200:

          description: |

            OK.

            Resource successfully deleted.

        404:

          description: |

            Not Found.

            The resource to be deleted does not exist.

          schema:

            $ref: '#/definitions/Error'



*Dushani Wellappili*
Senior Software Engineer - WSO2

Email : [email protected]
Mobile : +94779367571
Web : https://wso2.com/




On Thu, Jan 16, 2020 at 3:33 PM Dushani Wellappili <[email protected]>
wrote:

> Hi all,
>
>    - Global OAuth2 Scopes are useful when an organization/department (a
>    tenant) has a need to globally control the fined grained access control
>    permissions of all the published APIs, from a central place.
>    - It reduces the rework of creating the same scope with duplicate
>    access control permissions for each of the API. With this, such scope
>    creation would be a one time task. Global scopes will be created by
>    administrative users and the API developers can attach the available global
>    scopes for the API resources when designing the API.
>    - The support to add multiple OAuth scopes per resource is useful when
>    you need to group the access permissions to resources by scopes and reuse
>    them across different APIs.
>
> *DESIGN*
>
>    - The global scope management view will be added to the Publisher UI
>    so that the API developers can easily check what are the available global
>    scopes and their role bindings from the same portal when creating an API.
>    - Current Publisher Portal UI for Resource Management of an API will
>    be modified to attach the global scopes and attach multiple scopes per
>    resource.
>    - The current flow of managing and attaching per API scopes will
>    remain as it is.
>    - To make sure that only privileged users(admins) can
>    add/update/delete any global scope, the relevant Publisher REST APIs will
>    be secured using a REST API scope. Eg: apim:global_scope_manage
>    - To support global scopes, we need to add a new table AM_GLOBAL_SCOPE
>    on AM_DB.
>
> *AM_GLOBAL_SCOPE*
>      SCOPE_ID INTEGER NOT NULL,
>      TENANT_ID INTEGER DEFAULT -1,
>      FOREIGN KEY (SCOPE_ID) REFERENCES IDN_OAUTH2_SCOPE (SCOPE_ID) ON
> DELETE CASCADE
>
>
>    - We need to modify the PK constraint on IDN_OAUTH2_RESOURCE_SCOPE to
>    be a composite key on both RESOURCE_PATH and SCOPE_ID to support
>    multiple scopes per resource.
>
>
> *IDN_OAUTH2_RESOURCE_SCOPE *
>        RESOURCE_PATH VARCHAR(255) NOT NULL,
>        SCOPE_ID INTEGER NOT NULL,
>        TENANT_ID INTEGER DEFAULT -1,
>        PRIMARY KEY (SCOPE_ID, RESOURCE_PATH),
>        FOREIGN KEY (SCOPE_ID) REFERENCES IDN_OAUTH2_SCOPE (SCOPE_ID) ON
> DELETE CASCADE
>
>
>    - JDBCScopeValidator will be modified to support validating multiple
>    scopes attached per resource.
>    - Global Scopes will be added via the following Publisher REST APIs.
>    Using resource name "global-scopes" seems more appropriate since these REST
>    APIs will be used to only manage global scopes. The "Scope" resource and
>    "ScopeList" resource are already defined in Publisher REST API, hence we
>    can use the same resources for global-scopes as well.
>
>
> ######################################################
>
> # The "Global Scopes" resource APIs
>
> ######################################################
>
>   /global-scopes
>
>
> #-------------------------------------------------------------
>
> # Retrieve the global scopes list
>
> #-------------------------------------------------------------
>
>     get:
>
>       security:
>
>         - OAuth2Security:
>
>           - apim:api_view
>
>       summary: Get the list of global scopes
>
>       responses:
>
>         200:
>
>           description: |
>
>             OK.
>
>             Global Scope list is returned.
>
>           schema:
>
>             $ref: '#/definitions/ScopeList'
>
>           headers:
>
>             Content-Type:
>
>               description: |
>
>                 The content type of the body.
>
>               type: string
>
>         500:
>
>            description: Internal server error while retrieving global
> scope list
>
>            schema:
>
>             $ref: '#/definitions/Error'
>
>
> #-------------------------------------------------------------
>
> # Create a new global scope
>
> #-------------------------------------------------------------
>
>     post:
>       security:
>         - OAuth2Security:
>           - apim:global_scope_manage
>       summary: Add a new global scope
>       description: |
>         This operation can be used to add a new global scope.
>       parameters:
>         - in: body
>           name: body
>           description: |
>             Scope object that needs to be added
>           required: true
>           schema:
>             $ref: '#/definitions/Scope'
>       responses:
>         201:
>           description: |
>             Created.
>             Successful response with the newly created Scope object as an
> entity in the body.
>           schema:
>             $ref: '#/definitions/Scope'
>           headers:
>             Content-Type:
>               description: |
>                 The content type of the body.
>               type: string
>         400:
>           description: |
>             Bad Request.
>             Invalid request or validation error
>           schema:
>             $ref: '#/definitions/Error'
>         415:
>           description: |
>             Unsupported media type.
>             The entity of the request was in a not supported format.
>
>
> ######################################################
>
> # The "Individual Global Scope" resource APIs
>
> ######################################################
>
>   /global-scopes/{scopeId}
>
>
> #-------------------------------------------------------------
>
> # Retrieve the details of a global scope
>
> #-------------------------------------------------------------
>
>
>     get:
>
>       security:
>
>         - OAuth2Security:
>
>           - apim:api_view
>
>       summary: Get details of a global scope
>
>       parameters:
>       - $ref: '#/parameters/scopeId'
>
>       responses:
>
>         200:
>
>           description: |
>
>             OK.
>
>             Requested Global Scope is returned.
>
>           schema:
>
>             $ref: '#/definitions/Scope'
>
>           headers:
>
>             Content-Type:
>
>               description: |
>
>                 The content type of the body.
>
>               type: string
>
>         404:
>           description: |
>             Not Found.
>             Requested Global Scope does not exist.
>           schema:
>             $ref: '#/definitions/Error'
>
>
> #-------------------------------------------------------------
>
> # Update a global scope
>
> #-------------------------------------------------------------
>
>     put:
>
>       security:
>
>         - OAuth2Security:
>
>           - apim:global_scope_manage
>
>       summary: Update an API
>
>       description: |
>
>         This operation can be used to update an existing Global Scope.
>
>       parameters:
>
>         - $ref: '#/parameters/scopeId'
>
>         - in: body
>
>           name: body
>
>           description: |
>
>             Scope object that needs to be updated
>
>           required: true
>
>           schema:
>
>             $ref: '#/definitions/Scope'
>
>       responses:
>
>         200:
>
>           description: |
>
>             OK.
>
>             Successful response with updated Scope object
>
>           schema:
>
>             $ref: '#/definitions/Scope'
>
>           headers:
>
>             Content-Type:
>
>               description: |
>
>                 The content type of the body.
>
>               type: string
>
>         400:
>
>           description: |
>
>             Bad Request.
>
>             Invalid request or validation error
>
>           schema:
>
>             $ref: '#/definitions/Error'
>
>         404:
>
>           description: |
>
>             Not Found.
>
>             The resource to be updated does not exist.
>
>           schema:
>
>             $ref: '#/definitions/Error'
>
>
> #-----------------------------------------------------
>
> # Delete the definition of an API
>
> #-----------------------------------------------------
>
>     delete:
>
>       security:
>
>         - OAuth2Security:
>
>           - apim:global_scope_manage
>
>       summary: Delete an API
>
>       description: |
>
>         This operation can be used to delete an existing Global Scope
> proving the Id of the scope.
>
>       parameters:
>
>         - $ref: '#/parameters/scopeId
>
>       responses:
>
>         200:
>
>           description: |
>
>             OK.
>
>             Resource successfully deleted.
>
>         404:
>
>           description: |
>
>             Not Found.
>
>             Resource to be deleted does not exist.
>
>           schema:
>
>             $ref: '#/definitions/Error'
>
> *FLOW*
>
> 1. A privileged user/administrative user logs into Publisher Portal and
> creates a global scope providing name, description and role bindings.
> 2. Upon checking whether the scope key is not duplicated in the
> IDN_OAUTH2_SCOPE table, this scope will be added to the IDN_OAUTH2_SCOPE,
> IDN_OAUTH2_SCOPE2_BINDING and AM_GLOBAL_SCOPE tables.
> 3. An API developer creates an API and visits the resources page. The list
> of scopes to add per resource is populated using the per-API scopes from
> the API object and from the "GET /global-scopes" backend service call.
> 4. The developer selects a set of global/per-API scopes for the resource.
> The swagger is updated with the scopes list and resource scope list. The
> backend service "PUT apis/{apiId}/swagger" updates the
> IDN_OAUTH2_RESOURCE_SCOPE and AM_API_SCOPES table.
> 5. App Developer will generate a token with the scopes and invoke the API.
> During the KeyValidation service, when the scopes are validated for the
> resource using the JDBCScopeValidator, it will check whether token bears
> any of the given resource scopes.
>
> This is a draft design for the implementation. Hence appreciate your
> suggestions/comments to improve the above. Once the above is finalized, we
> will work on the UI design.
>
> Thanks
>
> *Dushani Wellappili*
> Senior Software Engineer - WSO2
>
> Email : [email protected]
> Mobile : +94779367571
> Web : https://wso2.com/
>
>
>
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to