API de aprovisionamento SCIM
- Leitura
- 4 min
- Categoria
- Proton VPN for Business
Visão geral
A API de aprovisionamento SCIM (System for Cross-domain Identity Management) é um protocolo padrão para automatizar o aprovisionamento e a gestão de identidades de utilizadores em aplicações baseadas na nuvem. A Proton suporta esta API, que lhe permite criar, atualizar, eliminar e gerir contas de utilizador e grupos. A API baseia-se na especificação SCIM 2.0, que fornece um esquema de utilizador comum e uma interface de API RESTful para facilitar a integração.
A Proton suporta os seguintes fornecedores de identidade:
- Okta (https://www.okta.com/(nova janela))
- Microsoft Entra ID
O URL base para todas as chamadas do fornecedor de identidade é: https://scim.proton.me/{tenentId}/v2/(nova janela). Todos os métodos SCIM são ramificações deste URL base.
Autenticação
O token deve ser incluído num cabeçalho Authorization com o tipo Bearer ao chamar qualquer um dos métodos SCIM. Este token pode ser gerado e substituído na secção Single-sign-on > Aprovisionamento automático SCIM. Clique no botão “Gerar novo token” e copie o token gerado.

Por exemplo:
GET /Users?count=10Host: scim.proton.meAccept: application/scim+jsonAuthorization: Bearer {token}Utilizadores
Atributos principais
| id | Um identificador único para um recurso SCIM, como um utilizador, que é definido pela Proton. |
| userName (obrigatório) | Um identificador único para o utilizador. Aqui, utilizamos o e-mail como userName. |
| active | Um valor booleano que indica se o utilizador está ativo. A predefinição é true. |
Operações
Obter uma lista paginada de todos os utilizadores
Pedido
GET /Users?count=1 Host: scim.proton.meAccept: application/scim+jsonAuthorization: Bearer {token}Resposta
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"totalResults": 1,
"itemsPerPage": 1,
"startIndex": 1,
"Resources": [
{
"id": "avveKyJZ_cCkULxxxZj4_U8j1IwqaGkcso02I6bDFoyrfJSqqXLS3FToNOiwP1tNwBaaraqfKVE993xaVcYSxQ==",
"userName": "test@sso.protonhub.org",
"active": true
}
]
}Criar um novo utilizador
Pedido
POST /UsersHost: scim.proton.meAccept: application/scim+jsonAuthorization: Bearer {token}Resposta
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "avveKyJZ_cCkULxxxZj4_U8j1IwqaGkcso02I6bDFoyrfJSqqXLS3FToNOiwP1tNwBaaraqfKVE993xaVcYSxQ==",
"userName": "test@sso.protonhub.org",
"active": true,
"meta": {
"resourceType": "User",
"created": "2024-07-25T04:39:27Z",
"lastModified": "2024-07-25T04:39:27Z",
"location": "https://scim.proton.me/{tenent-id}/v2/Users/avveKyJZ_cCkULxxxZj4_U8j1IwqaGkcso02I6bDFoyrfJSqqXLS3FToNOiwP1tNwBaaraqfKVE993xaVcYSxQ==",
"version": "1"
}
}
Obter um único utilizador
Pedido
GET /Users/avveKyJZ_cCkUL1iBZj4_U8j1IxxxGkcso02I6xDFoyrfJSxxXLS3FToNOiwP1tNwBaaraqfKVExx3xaVcYSxQ==Host: scim.proton.meAccept: application/scim+jsonAuthorization: Bearer {token}Resposta
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "avveKyJZ_cCkUL1iBZj4_U8j1IxxxGkcso02I6xDFoyrfJSxxXLS3FToNOiwP1tNwBaaraqfKVExx3xaVcYSxQ==",
"userName": "test@sso.protonhub.org",
"active": true,
"meta": {
"resourceType": "User",
"created": "2024-07-24T06:22:20Z",
"lastModified": "2024-07-24T06:22:20Z",
"location": "https://scim.proton.me/{tenentId}/v2/Users/avveKyJZ_cCkUL1iBZj4_U8j1IwqaGkcso02I6bDFoyrfJSqqXLS3FToNOiwP1tNwBaaraqfKVE993xaVcYSxQ==",
"version": "1"
},
"externalId": "00uganxwluxxxxxxxxxx"
}Eliminar um utilizador
Pedido
DELETE /Users/avveKyJZ_cCkUL1iBZj4_U8j1IxxxGkcso02I6xDFoyrfJSxxXLS3FToNOiwP1tNwBaaraqfKVExx3xaVcYSxQ==Host: scim.proton.meAccept: application/scim+jsonAuthorization: Bearer {token}Grupos
Atributos principais
| id | Um identificador único para um recurso SCIM, como um utilizador, que é definido pela Proton. |
| displayName | Nome para o grupo. |
| members | Uma lista de membros do grupo. |
Operações
Obter lista de grupos
Pedido
GET /Groups?startIndex=1&count=10Host: scim.proton.meAccept: application/scim+jsonAuthorization: Bearer {token}Resposta
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"totalResults": 0,
"itemsPerPage": 100,
"startIndex": 1,
"Resources": [
{
"id": "d27f32f6-1e03-4e34-b5b5-9b89c11ed54e",
"displayName": "Admins",
"members": [
{
"value": "2819c223-7f76-453a-919d-413861904646",
"display": "John Doe"
}
],
"meta": {
"resourceType": "Group",
"created": "2024-07-25T05:10:22Z",
"lastModified": "2024-07-25T05:10:22Z",
"location": "https://scim.proton.me/{tenentId}/v2/Groups/d27f32f6-1e03-4e34-b5b5-9b89c11ed54e"
}
}
]
}Obter os detalhes de um grupo através do respetivo ID único
Pedido
GET /Groups/d27f32f6-1e03-4e34-b5b5-9b89c11ed54eHost: scim.proton.meAccept: application/scim+jsonAuthorization: Bearer {token}Resposta
{
"id": "d27f32f6-1e03-4e34-b5b5-9b89c11ed54e",
"displayName": "Admins",
"members": [{ "value": "2819c223-7f76-453a-919d-xxxxxxxxxxxx", "display": "John Doe" }],
"meta": {
"resourceType": "Group",
"created": "2024-07-25T05:10:22Z",
"lastModified": "2024-07-25T05:10:22Z",
"location": "https://scim.proton.me/{tenentId}/v2/Groups/d27f32f6-1e03-4e34-b5b5-9b89c11ed54e"
}
}
Tratamento de erros
As respostas são formatadas de acordo com a secção 3.12 do RFC-7644(nova janela), sendo entregues com um código de estado HTTP que indica a natureza do erro e um corpo de resposta que fornece mais detalhes.
Resposta de erro
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
"detail": "UserName is already taken",
"status": "400"
}
Os erros mais comuns
- 400 Bad Request: O pedido era inválido ou não pode ser processado de outra forma.
- 404 Not Found: O recurso solicitado não pôde ser encontrado.
- 409 Conflict: O pedido não pôde ser concluído devido a um conflito com o estado atual do recurso de destino.
uniqueness: Já existe um valor de atributo único no sistema.
- 500 Internal Server Error: Ocorreu um erro no lado do servidor.