Authorization service
This service can be added to your project by visiting Mia-Platform Marketplace and creating a new microservice from the Authorization Service plugin.
Configuration
The configuration is saved in the auth.json
file, which is generated from the backend and visible as read-only. One way to overwrite the configuration is editing the service advanced configuration. The configuration must follow this schema:
{
"definitions": {
"authorization": {
"type": "object",
"properties": {
"expression": {
"type": "string"
},
"public": {
"type": "boolean"
}
},
"required": [
"expression",
"public"
]
}
},
"type": "object",
"patternProperties": {
"^\/": {
"type": "object",
"patternProperties": {
"^(GET|POST|PATCH|PUT|DELETE|HEAD)$|^(ALL)$": {
"type": "object",
"properties": {
"authorization": {
"$ref": "#/definitions/authorization"
},
"backofficeAuthorization": {
"$ref": "#/definitions/authorization"
}
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
In this configuration, we expect that all the methods are written in uppercase. You can also insert the keyword ALL
that automatically handles the main methods: GET
, POST
, PUT
, PATCH
, DELETE
, HEAD
and OPTIONS
.
In this configuration authorization is separated between backoffice and frontend request. The header to match this condition is set by the env variable BACKOFFICE_HEADER_KEY
.
Configuration example
{
"/": {
"GET": {
"authorization": {
"expression": "true",
"public": true
}
},
"POST": {
"authorization": {
"expression": "false",
"public": false
}
},
"PUT": {
"authorization": {
"expression": "false",
"public": false
},
"backofficeAuthorization": {
"expression": "false",
"public": false
}
}
},
"/myApi": {
"ALL": {
"authorization": {
"expression": "groups.admin && isBackoffice",
"public": false
}
}
},
"/users": {
"ALL": {
"authorization": {
"expression": "groups.admin && isBackoffice",
"public": false
}
}
}
}
Environment variables
- LOG_LEVEL (default:
trace
): level of the log. It can betrace
,debug
,info
,warn
,error
, orfatal
; - HTTP_PORT (default:
3000
): the port exposed by the service; - CONFIGURATION_PATH (required, default:
./
): the path to the configuration file. Do not include the file name; - CONFIGURATION_FILE_NAME (required, default:
test-config.test
): the name of the configuration file. Do not include the full path; - BACKOFFICE_HEADER_KEY (required, default:
isbackoffice
): the header key which identifies the value which determines if the service is considered backoffice; - SERVICE_VERSION (default:
1.0.0
): the service version, included in status routes responses; - SERVICE_PREFIX: the prefix used for the path of the service endpoints;
- USERINFO_URL (required, if
TRUST_MIA_USER_HEADERS
is set tofalse
): the url of the service that provides information about the user. If you rely onauth0-client
or on theauthentication-service
, the value of this variable should be respectivelyhttp://auth0-client/userinfo
orhttp://authentication-service/userinfo
, where the hostname might be different if your service has been renamed; - CUSTOM_USER_ID_KEY : a unique identifier of the user, based on the response given by the endpoint set in USERINFO_URL. If you use
auth0-client
it should besub
, if you useauthentication-service
it should beuserId
. Refer to the documentation of the external service you are using for more information about the user id. - AUTHORIZATION_STRICT_MODE_ENABLED: defines whether strict mode is enabled or not;
- USER_PROPERTIES_TO_PROXY: the name of the fields in the response from USERINFO_URL that you want to be proxied to other services. They will be JSON encoded and set as value of the header configured in the env variable
USER_PROPERTIES_HEADER_KEY
. - CLIENT_TYPE_HEADER_KEY (required, default:
client-type
): the header key which identifies the value which determines the client type; - BACKOFFICE_USERINFO_URL: the backoffice url of the service that provides information about the user;
- CUSTOM_PERMISSIONS_KEY: the name of the field in the response from USERINFO_URL to be used to retrieve permissions. The field must be at the first level of the response and must be an array of strings. Permissions can then be used in ACL expressions as described here;
- DELAY_SHUTDOWN_SECONDS (default:
10
): the amount of seconds waited before closing the service when performing a graceful shutdown; - HEADERS_TO_PROXY: specifies which headers need to be proxied (to the url set by USERINFO_URL variable). If you are using
auth0-client
orauthentication-service
, its value should bex-request-id,request-id,cookie,authorization,client-type,host,x-forwarded-host
; - AUTHORIZATION_HEADERS_TO_PROXY: specifies which headers could contain the authorization headers used by the user services in a comma separated list of headers. For example, in an oidc flow where the session is saved as bearer token, here should be set
authorization
. - TRUST_MIA_USER_HEADERS (default:
false
): specifies if the service should trust the request headers which contain the user data (be careful: do not set this totrue
if this authorization service is used by an API Gateway exposed to internet. This is intended for the API Gateways of the projects protected by an Edge Gateway). - USERID_HEADER_KEY (default:
miauserid
): the request header containing the user id. - GROUPS_HEADER_KEY (default:
miausergroups
): the request header containing the user groups. - USER_PROPERTIES_HEADER_KEY (default:
miauserproperties
): the request header containing the user properties.