Authorization for api.bigfs.m7.org
BigFS accepts M7 access tokens and then applies its own principal, bucket, and vault access rules. A valid token identifies the caller; it does not grant unrestricted access to stored objects.
The API base URL is:
https://api.bigfs.m7.org
Supported credentials
| Credential | Public transport | Where it applies | What BigFS validates |
|---|---|---|---|
| M7 consumer access token | Authorization: Bearer <token> |
Authenticated routes unless an endpoint documents a narrower rule | Token signature, issuer and validity times; consumer token mode; an active BigFS principal; and the endpoint's resource-access rules |
| M7 access token for uploads | Authorization: Bearer <token> |
/v1/upload/form_data and /v1/upload/post_data |
Token validity, an active BigFS principal, and owner or admin access to the target bucket; upload routes do not impose the consumer-versus-tenant token-mode check |
| Offline-access refresh package | An opaque refresh_token plus its secret binding_chain and binding_link; send only to the issuing M7 SSO token endpoint using the owning OAuth client's authentication |
Refreshing a token bundle obtained through the BigFS device helper | The SSO provider's client, binding, rotation, expiry, and revocation rules; BigFS resource routes do not accept refresh packages |
| One-time download grant | The id and secret key in the issued /v1/download/link URL |
One download through /v1/download/link |
A matching, unexpired, unused grant |
BigFS uses a confidential OAuth client internally for its offline-access device helper. That client secret is server-held and is never a caller credential. ID tokens, refresh tokens, OAuth client secrets, device codes, and user codes do not replace a Bearer access token on BigFS resource routes.
Some delivery routes are intentionally unauthenticated. In particular,
/v1/public/redir/<bucket>/<name> accepts no credential. Its availability does
not make an authenticated bucket or object public through another route.
Obtain an access token
Obtain the initial consumer access token through an M7 SSO flow appropriate to the caller. See the M7 SSO API documentation for the authorization, token, device, refresh, and revocation contracts.
BigFS also provides an authenticated device helper for obtaining an offline-access bundle for the current principal. This helper is not an unauthenticated sign-in bootstrap: both helper routes require an existing consumer access token.
- Call
/v1/offline_access/oauth/device/issuewith the current Bearer token. - Show the returned
verification_urianduser_codeto the user. - Poll
/v1/offline_access/oauth/device/pickupwith the returned recordid, waiting at least the returnedintervalbetween calls. - On the first successful pickup, store the returned access token, refresh
token,
binding_chain, andbinding_linksecurely. A later pickup of the redeemed record confirms success but does not return the package again.
curl --request POST \
'https://api.bigfs.m7.org/v1/offline_access/oauth/device/issue' \
--header 'Authorization: Bearer ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"label":"Desktop backup"}'
The helper's default requested scope is openid profile email groups offline_access. The response reports expires_in for the access token and
refresh_expires_in for the refresh token. Treat the refresh token and both
binding values as opaque secrets; they form one refresh package. The service
supplies its own OAuth client authentication to SSO during issue and pickup,
and callers must not send a client secret to BigFS.
Send a Bearer request
Send the access token in the Authorization header:
curl --request POST \
'https://api.bigfs.m7.org/v1/bucket/search' \
--header 'Authorization: Bearer ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data '{}'
M7 access tokens are signed compact JWTs, but clients should treat them as opaque. Decoded claims are not proof that a token is current, accepted by BigFS, or authorized for a resource.
The public integration contract is Authorization: Bearer <token>. Do not put
access tokens in URLs, query strings, request bodies, or cookies, and do not
depend on compatibility token transports. Never log a complete token or
authorization header.
BigFS currently accepts M7 tokens issued by id.m7.org with the supported
RS512 signature profile. It verifies the signature and trusted certificate
source and enforces the token's time claims. Most authenticated routes also
require consumer token mode; a tenant token is rejected there even when its
signature is valid.
DPoP status
DPoP is not part of the supported BigFS authorization contract. BigFS reduces
resource authentication to Bearer-token validation and does not validate a
DPoP proof's signature, method and URL binding, access-token binding, freshness,
unique identifier, or replay state. Header parsing or CORS allowance for a
DPoP header does not change that contract. Send the Bearer request described
above and do not rely on a DPoP proof to authorize a BigFS request.
Principal and resource authorization
After token validation, BigFS resolves the token's id or sub identity to a
local principal. The principal must be active. A newly seen supported identity
can be registered as an active BigFS user principal; later requests use the
current local principal record rather than trusting a decoded role claim as the
complete authorization decision.
Resource access is evaluated from current BigFS relationships:
| Boundary | Authorization behavior |
|---|---|
| Bucket membership | Any active bucket member can read the bucket and related objects, keys, remote-object records, task records, and authorized downloads. |
Bucket owner or admin |
Required to change bucket contents, delete objects or keys, upload data, delete the bucket, process tasks, and manage bucket members. Admins cannot manage owner or admin memberships, and the final owner cannot be removed or demoted. |
| Vault membership | Any active vault member can read the vault. |
Vault owner or admin |
Required to change or delete a vault, manage linked buckets, and inspect the vault's available handlers. |
Vault owner |
Required to add, change, or remove vault-management principals. The final owner cannot be removed or demoted. |
BigFS root principal |
Required when a new vault selects a private handler. |
| Offline-access record ownership | A caller can pick up only the device record created for that same BigFS principal. |
Creating a bucket or vault makes the current principal its owner. Possession of another principal's resource UUID does not bypass membership checks. A token that is valid for one principal, bucket, or vault does not authorize access to another principal's resources.
The upload routes are the token-mode exception: they accept a cryptographically
valid M7 access token without requiring consumer mode, but they still require
an active local principal and owner or admin membership on the target
bucket.
One-time download grants
An authorized bucket member can call /v1/download/issue with a consumer
Bearer token. BigFS returns a grant containing an opaque id and secret key,
plus a ready-to-use URL. The grant expires after 120 seconds and is consumed by
the first successful /v1/download/link request.
curl --request POST \
'https://api.bigfs.m7.org/v1/download/issue' \
--header 'Authorization: Bearer ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"id":"ASSET_UUID"}'
Use the exact returned URL to retrieve the file; no Bearer header is required on the link request. The URL itself is a credential. Share it only with the intended recipient, avoid storing it in logs or analytics, and consume it promptly. A missing, mismatched, expired, or already-consumed grant fails and cannot be refreshed; issue a new grant through the authenticated route.
Expiry, refresh, and revocation
- Stop using an access token when its reported lifetime ends. Obtain a replacement through its SSO flow; BigFS does not extend access-token lifetimes.
- Send refresh packages only to the issuing M7 SSO token endpoint. A refresh
exchange requires the
refresh_token,binding_chain,binding_link, and the owning OAuth client's authentication. Never send this material to a BigFS resource route or place it in a URL. - The BigFS device helper does not expose a public refresh or revocation operation. Do not assume that possession of its returned refresh package grants permission to act as BigFS's confidential OAuth client. An authorized owner of that client must follow the M7 SSO rotation and revocation contract; other integrations should obtain a replacement through their supported authorization flow.
- Resource access can also end while a token remains cryptographically valid: disabling the BigFS principal or removing its bucket or vault membership causes later authorization checks to fail.
- A device request can end in
access_denied,expired_token, or another terminal OAuth error. Start a new device request instead of continuing to poll a terminal record. - A download grant expires after 120 seconds or when consumed. It has no refresh operation.
Common failures
BigFS JSON failures use status: 0 with a diagnostic comment. Upload
authorization failures use HTTP 401 for a missing principal and HTTP 403
for other access denials, with details under data.authorization. Treat
comments and diagnostic fields as troubleshooting information rather than a
stable machine-error protocol.
| Failure | Typical cause | Client action |
|---|---|---|
Missing token |
No Bearer access token was supplied | Add the Authorization header; do not substitute an ID or refresh token |
| Token validation failure | Malformed token, unsupported signature, bad issuer or certificate, or invalid validity time | Discard the token and obtain a new one from SSO |
This endpoint requires a consumer token |
A tenant-mode token was sent to a consumer route | Obtain a consumer token or use only a route that explicitly accepts the other mode |
| Principal unavailable or inactive | The token identity cannot resolve to an active BigFS principal | Reauthenticate; if the failure persists, restore the principal rather than retrying blindly |
Bucket access denied |
The principal lacks membership or the required bucket role | Use an authorized principal or have a bucket owner grant the required role |
Vault access denied |
The principal lacks membership or the required vault role | Use an authorized principal or have a vault owner grant the required role |
Device pickup remains pending |
The user has not completed verification | Wait at least the reported polling interval and try again |
Device pickup returns slow_down |
The client polled too quickly | Replace the old interval with the larger interval returned by BigFS |
| Download grant failure | The grant is missing, mismatched, expired, or consumed | Request a new grant with an authorized consumer token |
Security checklist
- Use TLS and the exact
https://api.bigfs.m7.orgproduction host. - Keep access tokens, refresh packages, download-grant URLs, and OAuth client secrets out of source control, logs, analytics, and error reports.
- Treat signed JWT contents as untrusted client-side hints; rely on BigFS responses for authorization decisions.
- Request only the scopes required by the issuing flow and store offline-access refresh tokens using protection appropriate for long-lived credentials.
- Revoke and replace credentials after suspected disclosure.
- Check each endpoint's documented bucket, vault, principal, and role boundary before enabling an integration.
Related documentation: