Security at OneTeam.
A plain-English summary of the technical controls protecting student data. Detailed obligations live in our Data Privacy Agreement.
Technical controls in production
Authentication & Identity
Common district-questionnaire answers, with the current state and the roadmap stated separately so there’s no daylight between what we say and what’s shipping.
Staff (administrators, teachers, specialists)
- Today: email + password, managed by Supabase Auth. Passwords are bcrypt-hashed in Supabase’s
auth.userstable; OneTeam servers and personnel never see plaintext. HaveIBeenPwned breach-list integration rejects compromised passwords at signup and password change. - Roadmap (per-district): Microsoft Entra ID OIDC, tenant-locked to the district’s Microsoft 365 tenant. When this is enabled for a district, OneTeam stores no passwords for that district’s staff — authentication, MFA, and session lifetime are inherited from Entra.
- SAML 2.0: on the roadmap. Available on request for districts that require it; OIDC is the supported flow for v1.
Parents
- Authentication: emailed sign-in link (magic link) is the default; password is optional. Parents are not in the district directory.
- Authorization to a child’s record: per-student share code issued by the child’s teacher, plus admin-approved access request. Knowing the share code does not grant access on its own — a teacher must approve, and the parent must accept the consent disclosure before any data renders.
Students
Students do not sign in to OneTeam. Children under 13 do not have OneTeam accounts.
Multi-factor authentication
- Today: TOTP MFA available for all staff via Supabase Auth. Destructive admin endpoints (account deletion, retention purge) are aal2-gated server-side, regardless of UI path.
- With Entra: staff MFA is inherited from the district’s Conditional Access policy — OneTeam does not enroll a separate factor.
- Parents: not required.
Sessions
- Sessions are JWTs issued by Supabase Auth (signed with Supabase’s key, validated server-side). OneTeam does not mint its own session tokens.
- Default access-token lifetime: 1 hour. Refresh tokens are rotated and server-revocable.
- No session secrets are persisted client-side beyond the JWT and refresh token, which are stored in browser localStorage on web and the iOS Keychain on iOS.
Deprovisioning
- Today: a school administrator disables a staff account in OneTeam directly. Active sessions are revoked on next request validation.
- With Entra: when the district disables the user in Entra, the next sign-in attempt fails. Active OneTeam sessions end within the JWT TTL (default 1 hour). SCIM provisioning for immediate session revocation is on the roadmap if a district requires it.
Audit-log retention
OneTeam’s ot_audit_log is append-only and not purged automatically. Districts can request a configurable retention window (1 year minimum) on contract. Authentication events written to the audit log: account creation, email confirmation, account ban, account disable (mirrored from auth.users via a database trigger), and successful sign-in and MFA enrollment (logged client-side from the OneTeam app on every successful authentication). Events still recorded only in Supabase Auth’s internal log (auth.audit_log_entries) and exportable on request: sign-in failures, password-verification attempts, password resets, and MFA challenge attempts; mirroring those into ot_audit_log requires Supabase Auth Hooks (password-verification-attempt-hook + mfa-verification-attempt-hook) and is on the roadmap.
Sub-processors
OneTeam uses three sub-processors. Each is bound by a written agreement requiring them to handle data on our behalf subject to the same restrictions as our Privacy Policy and DPA, and contractually prohibited from using the data for any other purpose.
We provide 30 days’ written notice before adding or changing any sub-processor. Schools may terminate their agreement before a new sub-processor takes effect if they object.
Incident response
If we discover or are notified of a security incident affecting student data, we:
- Notify affected schools without unreasonable delay, and within 72 hours when feasible.
- Provide a written incident summary including scope, root cause, remediation, and affected records once the investigation is complete.
- Cooperate with the school’s breach-notification obligations under FERPA, state laws (e.g., NY Ed Law 2-d, CA SOPIPA), and the school’s own policies.
Reporting a vulnerability
If you believe you’ve found a security vulnerability in OneTeam, please email privacy@oneteam.school with subject line “Security disclosure”. Include reproduction steps and the impact you observed. We acknowledge within 1 business day, work in good faith on a fix, and credit researchers in a coordinated disclosure if you wish.
What’s on the roadmap
We are committed to continuous improvement of our security posture. Currently in development:
- Independent third-party penetration test (target: 2026–27 school year).
- Formal SOC 2 Type II audit (under evaluation).
- Security questionnaire pre-fills (CAIQ-Lite, HECVAT) for district procurement.