Skip to content
README.md 2.78 KiB
Newer Older
Pierre Ozoux's avatar
Pierre Ozoux committed
# SCIM Service Provider
Pierre Ozoux's avatar
Pierre Ozoux committed

JulienSchneider's avatar
JulienSchneider committed
This app allows to provision users and groups in Nextcloud from a scim client. It is based on [audriga/scim-server-php](https://github.com/audriga/scim-server-php) SCIM library.
Pierre Ozoux's avatar
Pierre Ozoux committed

Pierre Ozoux's avatar
Pierre Ozoux committed
You can see the [video](https://hot-objects.liiib.re/meet-liiib-re-recordings/pair_2022-05-02-15-40-37.mp4) that shows how it works.
Pierre Ozoux's avatar
Pierre Ozoux committed

Hugo Renard's avatar
Hugo Renard committed
## Installation
Hugo Renard's avatar
Hugo Renard committed
Like any other app, it's available on Nextcloud's [app store](https://apps.nextcloud.com/apps/scimserviceprovider).
Hugo Renard's avatar
Hugo Renard committed
## Authentication
Hugo Renard's avatar
Hugo Renard committed
Basic and bearer authentication are supported. For now, only admin users are authorized to access SCIM APIs.
Hugo Renard's avatar
Hugo Renard committed
### Basic authentication
Pierre Ozoux's avatar
Pierre Ozoux committed

Hugo Renard's avatar
Hugo Renard committed
You just have to generate an app password in `/settings/user/security`.
Hugo Renard's avatar
Hugo Renard committed
### Bearer authentication
Hugo Renard's avatar
Hugo Renard committed
It requires a JWT secret, to be enabled.
```shell
php occ config:app:set scimserviceprovider jwt-secret --value="CHANGE_ME"
Hugo Renard's avatar
Hugo Renard committed
Then you should generate a JWT signed with this secret and with `sub` in the payload referring to an existing username. ([Handy CLI tool](https://github.com/mike-engel/jwt-cli))
```shell
jwt encode --secret "CHANGE_ME" '{"sub":"admin"}'
Hugo Renard's avatar
Hugo Renard committed
## Usage
Hugo Renard's avatar
Hugo Renard committed
$ curl http://<path-to-nextcloud>/index.php/apps/scimserviceprovider/<Resource> -H 'Authorization: <Auth>' -H 'Content-Type: application/scim+json'
JulienSchneider's avatar
JulienSchneider committed
```
Pierre Ozoux's avatar
Pierre Ozoux committed

Hugo Renard's avatar
Hugo Renard committed
Where `<Resource>` designates a SCIM resource, such as `Users` or `Groups`.
Pierre Ozoux's avatar
Pierre Ozoux committed

Hugo Renard's avatar
Hugo Renard committed
### With Keycloak
Pierre Ozoux's avatar
Pierre Ozoux committed

Hugo Renard's avatar
Hugo Renard committed
You can use with the [SCIM plugin we developped for keycloak](https://lab.libreho.st/libre.sh/scim/keycloak-scim).
Hugo Renard's avatar
Hugo Renard committed
### With AzureAD
Hugo Renard's avatar
Hugo Renard committed
You can provision users from AzureAD to Nextcloud with this app. For this, you need to setup [Bearer authentication](#bearer-authentication).
Pierre Ozoux's avatar
Pierre Ozoux committed
## Running tests
Pierre Ozoux's avatar
Pierre Ozoux committed

Hugo Renard's avatar
Hugo Renard committed
Broken.
Pierre Ozoux's avatar
Pierre Ozoux committed

Pierre Ozoux's avatar
Pierre Ozoux committed
## Todo

JulienSchneider's avatar
JulienSchneider committed
 - [ ] Meta -> ([can't implement yet](https://github.com/nextcloud/server/issues/22640))
Pierre Ozoux's avatar
Pierre Ozoux committed
    - createdAt
    - lastModified
JulienSchneider's avatar
JulienSchneider committed
 - [ ] ExternalID
    - [ ] Groups - [waiting for feedback](https://help.nextcloud.com/t/add-metadata-to-groups/139271)
 - [ ] json exceptions
Hugo Renard's avatar
Hugo Renard committed
 - [x] group member removal
 - [x] pagination
 - [ ] CI/CD
   - [ ] Lint cs:check
   - [ ] test psalm
   - [ ] test insomnia
Hugo Renard's avatar
Hugo Renard committed
   - [x] publish app on app store
 - [x] Allow for simultaneous usage of basic auth and bearer token auth (see **Authentication TODOs / Open issues**)
JulienSchneider's avatar
JulienSchneider committed

## Disclaimer
This app relies on the fixes, being introduced to Nextcloud in [PR #34172](https://github.com/nextcloud/server/pull/34172), since Nextcloud can't properly handle the `Content-Type` header value for SCIM (`application/scim+json`) otherwise. In the meantime until this PR is merged, SCIM clients interacting with this app might need to resort to using the standard value of `application/json` instead.
Pierre Ozoux's avatar
Pierre Ozoux committed

## NextGov Hackathon

Pierre Ozoux's avatar
Pierre Ozoux committed
This app was started during the [Nextgov hackathon](https://eventornado.com/submission/automatic-sso-saml-sync-from-identity-provider-keycloak-through-a-well-known-protocol-scim?s=1#idea)!