OpenFGA Authorization Policy
Implement fine-grained authorization for your API using OpenFGA, a high-performance system based on Google's Zanzibar model. This policy verifies access permissions by checking relationships between users, objects, and actions.
With this policy, you'll benefit from:
- Fine-Grained Access Control: Define precise permissions based on complex relationships
- Scalable Authorization: Leverage OpenFGA's high-performance design for enterprise workloads
- Flexible Implementation: Adapt authorization checks dynamically based on request context
- Consistent Security: Apply standardized access control across your entire API
- Relationship-Based Model: Express complex authorization scenarios using intuitive object relationships
Beta
This policy is in beta. You can use it today, but it may change in non-backward compatible ways before the final release.
Enterprise Feature
This policy is only available as part of our enterprise plans. It's free to try only any plan for development only purposes. If you would like to use this in production reach out to us: sales@zuplo.com
Configuration
The configuration shows how to configure the policy in the 'policies.json' document.
config/policies.json
Policy Configuration
name<string>- The name of your policy instance. This is used as a reference in your routes.policyType<string>- The identifier of the policy. This is used by the Zuplo UI. Value should beopenfga-authz-inbound.handler.export<string>- The name of the exported type. Value should beOpenFGAAuthZInboundPolicy.handler.module<string>- The module containing the policy. Value should be$import(@zuplo/runtime).handler.options<object>- The options for this policy. See Policy Options below.
Policy Options
The options for this policy are specified below. All properties are optional unless specifically marked as required.
apiUrl(required)<string>- The URL of the OpenFGA service.storeId(required)<string>- The ID of the store.authorizationModelId(required)<string>- The ID of the authorization model.allowUnauthorizedRequests<boolean>- Indicates whether the request should continue if authorization fails. Default isfalsewhich means unauthorized users will automatically receive a 403 response. Defaults tofalse.credentials(required)<undefined>- No description available.
Using the Policy
This policy integrates with OpenFGA to provide fine-grained authorization for your API endpoints. OpenFGA implements Google's Zanzibar authorization model, allowing you to define and check complex permission relationships between users and resources.
Usage
To use this policy, you must programmatically set the relationship checks to be
performed against your OpenFGA store. This is done using the static
setContextChecks method.
The most common way to set the authorization checks are:
- Creating custom inbound policies for each authorization scenario
- Creating a custom inbound policy that reads data from the OpenAPI operation and sets the authorization checks dynamically
Example: Custom Authorization Policies
Create a file like modules/openfga-checks.ts to define your custom
authorization policies:
Code
Applying to Routes
In your route configuration, apply both the custom authorization policy and the OpenFGA policy:
Code
Then in your policies.json:
Code
Example: Dynamic Authorization Checks
You can make your authorization checks more dynamic by reading data from your OpenAPI specification or other sources. This allows you to define authorization rules that adapt based on the route, method, or other request properties.
For example, you could access custom data defined in your route:
Code
Then in your OpenAPI document, you would set the custom data on the x-authz
property:
Code
Read more about how policies work