SupportCALL Knowledge Base
Owner: SupportCALL
Website: www.supportcall.com.au
Purpose: Central knowledge base for ICT work, business operations and personal information
Document status: Active
Last reviewed: 8 August 2026
OAuth Registration for Google Drive, Microsoft OneDrive and Dropbox
Purpose: Register OAuth access for a public mobile backup application.
Application design: Each user installs the mobile app, selects a cloud-storage provider, signs into their own account and authorises the app to store backups.
Platforms covered:
- Android
- Apple iPhone and iPad
Last verified: 8 August 2026
1. How the System Works
- The application owner registers the mobile app with Google, Microsoft and Dropbox.
- The developer adds the resulting public client IDs to the mobile app.
- The user installs the app.
- The user selects Google Drive, OneDrive or Dropbox.
- The selected provider displays its secure login page.
- The user signs into their own cloud-storage account.
- The user approves access to the application's backup folder.
- The app encrypts the backup on the mobile device.
- The encrypted backup is uploaded to the user's own cloud account.
The application owner registers each provider only once.
Users must not create their own Google, Microsoft or Dropbox developer applications.
2. Mandatory Security Design
| Requirement | Required configuration |
|---|---|
| OAuth flow | Authorization Code with PKCE |
| PKCE method | S256 |
| Authentication display | Provider SDK or the device's secure system browser |
| Embedded WebView | Do not use |
| Client secret inside the app | Do not use |
| Access type | Delegated user access |
| Storage access | Application folder only |
| Android token storage | Android Keystore |
| Apple token storage | Apple Keychain |
| Backup protection | Encrypt before uploading |
| Background backups | Refresh token or offline access |
| Disconnect function | Revoke access and delete local tokens |
| OAuth request protection | Random state value |
| Sensitive logging | Never log tokens, passwords or encryption keys |
Native mobile applications cannot securely protect client secrets because users can inspect the installed application.
Official references:
3. Information Required Before Registration
Obtain the following exact information from the mobile-app developer.
| Information | Example |
|---|---|
| Public app name | SupportCALL Secure Backup |
| Android package name | au.com.supportcall.securebackup |
| Android debug signing fingerprint | Supplied by the developer |
| Android production SHA-1 fingerprint | Obtained from Google Play App Signing |
| Apple Bundle ID | au.com.supportcall.securebackup |
| Apple Team ID | Ten-character Apple identifier |
| Apple App Store ID | Obtained after creating the App Store listing |
| Support email | support@example.com |
| Developer email | developers@example.com |
| Product website | https://example.com/app |
| Privacy policy | https://example.com/app/privacy |
| Terms and conditions | https://example.com/app/terms |
| App logo | Square PNG image |
Do not invent the Android package name or Apple Bundle ID.
Once an app is published, changing these identifiers normally creates a different application.
Use company-controlled accounts for every registration.
Give at least two trusted company administrators access. Do not make a single person's private email account the only owner.
4. Required Website Pages
Even though the application runs on mobile devices, public OAuth applications require a website.
Create these pages before requesting production approval:
- Application homepage
- Privacy policy
- Terms and conditions
- Support or contact page
- Account and cloud-connection deletion instructions
The privacy policy must explain:
- What cloud information the app accesses.
- Why access is required.
- Where OAuth tokens are stored.
- Whether backups are encrypted.
- Whether the developer can access the backups.
- Whether data is shared with another organisation.
- How long information is retained.
- How users disconnect their cloud account.
- How users delete backups and associated information.
- How users contact the application owner.
The website must use HTTPS.
The website and privacy policy must be publicly accessible without requiring a login.
GOOGLE DRIVE
5. Select the Correct Google Drive Scope
Use one of the following options.
| Required backup behaviour | Google OAuth scope |
|---|---|
| Private backup controlled entirely through the app | https://www.googleapis.com/auth/drive.appdata |
| Files visible in Google Drive and created by the app | https://www.googleapis.com/auth/drive.file |
For a conventional encrypted application backup, use:
https://www.googleapis.com/auth/drive.appdata
The Google appDataFolder:
- Is hidden from the normal Google Drive interface.
- Is accessible only by the application that created it.
- Is suitable for application-managed backups and configuration data.
- Cannot be shared through the normal Google Drive sharing system.
- Can be deleted by the user.
- Counts against the user's Google Drive storage quota.
Use drive.file instead when users must see and manually manage the backup files in Google Drive.
Google classifies drive.appdata and drive.file as non-sensitive scopes.
Do not request this broad restricted scope:
https://www.googleapis.com/auth/drive
That scope gives the application broad access to the user's Google Drive.
Official references:
6. Create Google Development and Production Projects
Google requires separate development and production projects.
Create:
YOUR APP NAME - Development YOUR APP NAME - Production
The development project is for:
- Developer testing.
- Debug signing certificates.
- Test users.
- Unreleased builds.
The production project is for:
- Google Play releases.
- Apple App Store releases.
- Production signing certificates.
- Public users.
6.1 Create the Production Project
- Open Google Cloud Console.
- Sign in using the company-controlled Google account.
- Select the project selector at the top.
- Select New Project.
- Enter:
YOUR APP NAME - Production
- Select Create.
- Wait for the project to be created.
- Confirm the new production project is selected.
Repeat the process and create:
YOUR APP NAME - Development
Official reference:
7. Enable the Google Drive API
Complete these steps inside both Google projects.
- Open Google API Library.
- Confirm the correct project is selected.
- Search for:
Google Drive API
- Open Google Drive API.
- Select Enable.
- Do not enable unrelated APIs.
8. Configure Google Auth Platform
- Open Google Auth Platform.
- Confirm the correct project is selected.
- Select Get Started.
- Enter the real public application name.
- Select the monitored support email.
- Under Audience, select:
External
- Enter the developer contact email.
- Save the configuration.
External is required because any Google user must be able to connect their account.
The current Google interface contains:
- Branding
- Audience
- Clients
- Data Access
- Verification Center
Official reference:
9. Configure Google Branding
Open:
Google Auth Platform → Branding
Enter:
- Public application name.
- Monitored support email.
- Square application logo.
- Application homepage.
- Privacy-policy URL.
- Terms-and-conditions URL.
- Developer contact email.
Recommended logo:
PNG Square 120 × 120 pixels or larger Less than 1 MB
9.1 Add the Authorised Domain
Under Authorised domains, enter only the root domain.
Correct:
example.com
Incorrect:
https://example.com https://www.example.com/privacy www.example.com/app
Verify ownership using:
Google requires an external production application's homepage and privacy policy to be publicly accessible on a verified domain owned by the application publisher.
Official reference:
10. Add the Google Drive Scope
- Open:
Google Auth Platform → Data Access
- Select Add or Remove Scopes.
- Search for:
drive.appdata
- Select:
https://www.googleapis.com/auth/drive.appdata
- Save the changes.
If backup files must be visible to users in Google Drive, select this scope instead:
https://www.googleapis.com/auth/drive.file
Do not select both unless the application genuinely requires both.
11. Create the Google Android OAuth Client
- Open:
Google Auth Platform → Clients
- Select Create Client.
- Under Application type, select:
Android
- Enter a descriptive name:
YOUR APP NAME - Android Production
- Enter the exact Android package name.
- Enter the production SHA-1 certificate fingerprint.
- Select Create.
- Copy and record the generated Client ID.
11.1 Find the Google Play Production SHA-1
For a Google Play release, use the Google Play App signing key certificate.
Open:
Google Play Console → Select the application → Test and release → Setup → App integrity → App signing → App signing key certificate → SHA-1 certificate fingerprint
Copy the SHA-1 fingerprint exactly.
Do not accidentally use only the developer's upload-key SHA-1.
Development and production builds may use different signing certificates. Each required signing certificate must have the appropriate OAuth client registration.
Google identifies an Android application using:
- Android package name.
- SHA-1 signing-certificate fingerprint.
Official reference:
12. Create the Google Apple OAuth Client
- Open:
Google Auth Platform → Clients
- Select Create Client.
- Under Application type, select:
iOS
- Enter the exact Apple Bundle ID.
- Enter the Apple App Store ID when available.
- Enter the Apple Team ID.
- Enable Firebase App Check or Apple App Attest protection when supported.
- Select Create.
- Record the following:
iOS OAuth client ID iOS URL scheme Reversed client ID
The developer adds the reversed client ID to the Apple application's URL schemes.
Official reference:
13. Add Google Test Users
Complete these steps in the development project.
- Open:
Google Auth Platform → Audience
- Keep the publishing status as Testing.
- Find Test users.
- Add the Google accounts that will test the app.
- Save.
Test using Google accounts that are not project owners.
14. Publish the Google Integration
Before publishing:
- Confirm the homepage works.
- Confirm the privacy policy works.
- Confirm the terms page works.
- Confirm the support email is monitored.
- Confirm the domain is verified.
- Confirm only the required Drive scope is selected.
- Confirm production Android signing details are registered.
- Confirm the correct Apple Bundle ID is registered.
- Complete backup and restore testing.
Then:
- Open Verification Center.
- Complete branding verification.
- Complete the required basic data-access verification.
- Open Audience.
- Change the publishing status to Production.
- Publish the verified branding when Google reports Ready to publish.
Because drive.appdata is non-sensitive, it avoids the additional sensitive or restricted-scope review. The public application still requires Google's basic production and branding verification.
MICROSOFT ONEDRIVE
15. Select the Correct OneDrive Permission
Use this delegated Microsoft Graph permission:
Files.ReadWrite.AppFolder
This limits the application to its OneDrive application folder:
OneDrive
└── Apps
└── YOUR APP NAME
The user retains control over their own OneDrive and can delete or modify files inside the folder.
Microsoft currently marks the delegated Files.ReadWrite.AppFolder permission as preview. Test personal and Microsoft 365 accounts before public release.
Official references:
The broader alternative is:
Files.ReadWrite
That permission provides access to all files belonging to the signed-in user.
Do not use Files.ReadWrite without a deliberate security and product decision.
16. Register the Microsoft Application
- Sign in using a company-controlled Microsoft work account.
- Open:
Entra ID → App registrations → New registration
- Enter the public application name.
- Under Supported account types, select:
Accounts in any organizational directory and personal Microsoft accounts
This option supports:
- Personal Microsoft accounts.
- Outlook.com accounts.
- Hotmail accounts.
- Live.com accounts.
- Personal OneDrive accounts.
- Microsoft 365 work accounts.
- Microsoft 365 school accounts.
- Leave the initial Redirect URI blank.
- Select Register.
- Record:
Application (client) ID Directory (tenant) ID
Official reference:
17. Add the OneDrive Permission
- Open the new App Registration.
- Select API permissions.
- Select Add a permission.
- Select Microsoft Graph.
- Select:
Delegated permissions
- Search for:
Files.ReadWrite.AppFolder
- Tick the permission.
- Select Add permissions.
Do not choose the Application permission version.
This application works on behalf of the signed-in user. It therefore requires Delegated permission.
If User.Read was automatically added:
- Keep it if the app displays the Microsoft user's name or profile.
- Remove it if the app does not need Microsoft profile information.
Files.ReadWrite.AppFolder does not normally require administrator consent. A customer's Microsoft 365 administrator can still enforce stricter tenant consent rules.
18. Configure Microsoft Android Authentication
- Open the Microsoft App Registration.
- Select Authentication.
- Select Add a platform.
- Select:
Android
- Enter the exact Android package name.
- Use Microsoft's displayed
keytoolcommand to generate the required signature hash. - Enter the generated signature hash.
- Select Configure.
- Copy or download the displayed MSAL Configuration.
- Store it securely with the application's technical documentation.
The Google SHA-1 and Microsoft signature hash are not necessarily entered in the same format. Use the command and format displayed by Microsoft.
Configure the production signing certificate for the Google Play release.
Add a separate Android platform configuration for the development signing certificate when necessary.
Official reference:
19. Configure Microsoft Apple Authentication
- Open the Microsoft App Registration.
- Select Authentication.
- Select Add a platform.
- Select:
iOS / macOS
- Enter the exact Apple Bundle ID.
- Select Configure.
- Copy the displayed MSAL configuration.
- Copy the displayed redirect URI.
- Give both values to the developer.
20. Enable Microsoft Public-Client Flow
- Remain under Authentication.
- Find Advanced settings.
- Set:
Allow public client flows: Yes
- Select Save.
Do not create:
- Client secret.
- Client certificate.
- Federated credential.
These credentials are for confidential server applications. They do not belong inside a public mobile application.
The developer should use Microsoft's MSAL library.
MSAL supports:
- Authorization Code with PKCE.
- Secure system-browser authentication.
- Access-token management.
- Refresh-token management.
- Microsoft account selection.
- Redirect handling.
21. Configure Microsoft Branding
Open:
App Registration → Branding & properties
Enter:
- Application logo.
- Homepage URL.
- Privacy-statement URL.
- Terms-and-conditions URL.
- Support contact.
- Publisher domain.
Verify the publisher domain.
22. Complete Microsoft Publisher Verification
A public commercial app serving Microsoft 365 organisations should complete Publisher Verification.
Without Publisher Verification:
- Users may see an unverified-publisher warning.
- Some organisations may block user consent.
- Microsoft 365 administrators may require manual approval.
Publisher Verification normally requires enrolment in the Microsoft AI Cloud Partner Program.
Open:
App Registration → Branding & properties → Add Partner ID
Enter the organisation's Microsoft Partner identifier and complete verification.
Official references:
DROPBOX
23. Select the Correct Dropbox Access Model
Use:
Scoped access App folder
This restricts the application to:
Dropbox
└── Apps
└── YOUR APP NAME
Do not select Full Dropbox for an application that only stores and restores its own backups.
The Dropbox access type cannot be changed later.
Changing from App folder to Full Dropbox requires creation of a new Dropbox application.
Official reference:
24. Create the Dropbox Application
- Open Dropbox App Console.
- Sign in using the company-controlled Dropbox account.
- Select Create app.
- Choose:
Scoped access
- Choose:
App folder
- Enter a unique public application name.
- Select Create app.
- Record:
Dropbox App key
The App key is the public client identifier used by the mobile application.
Do not put the Dropbox App secret inside the mobile application.
25. Configure Dropbox Permissions
Open the Permissions tab.
Select only:
files.metadata.read files.content.read files.content.write
These scopes permit the application to:
- List its backup files.
- Read file metadata.
- Upload backup files.
- Download backup files.
- Replace backup files.
- Delete obsolete backup files.
Add this permission only when the app displays the connected Dropbox account's name:
account_info.read
Do not select:
- Sharing permissions.
- Team-management permissions.
- Team file permissions.
- Contact permissions.
- Full Dropbox access.
Select Submit or Save.
26. Configure Dropbox OAuth
Open the Settings tab.
Set:
Allow implicit grant: Disabled
The developer must use:
OAuth 2.0 Authorization Code PKCE S256 Short-lived access tokens Refresh token Offline access
For long-term background backups, the Dropbox OAuth request must include:
token_access_type=offline
The official Dropbox mobile SDK handles the callback using a URL scheme based on the App key:
db-DROPBOX_APP_KEY
This value is configured inside:
- The Android application manifest.
- The Apple application's URL configuration.
Do not invent a separate redirect URI.
Add a redirect URI to the Dropbox console only when the SDK or implementation provides an exact URI that must be registered.
Official reference:
27. Configure Dropbox Branding
Open the Branding tab.
Enter:
- Public application name.
- Publisher or company name.
- Accurate app description.
- Application website.
- Privacy-policy address where requested.
- Application icons.
Recommended access description:
The application accesses only its own Dropbox application folder to upload, list, download and delete encrypted backup files.
Do not claim that Dropbox itself encrypts the backup end to end.
The mobile application must encrypt the backup before uploading it.
28. Enable Dropbox Test Users
Initially, only the Dropbox account that owns the application can connect.
- Open Settings.
- Find Development users.
- Select Enable additional users.
- Test with several independent Dropbox accounts.
A generated access token from the Dropbox console is for owner testing only.
Never include a generated owner access token in:
- Mobile application code.
- Application configuration files.
- Source-control repositories.
- Documentation.
- Screenshots.
- Support messages.
- Crash reports.
29. Apply for Dropbox Production Status
Complete this before releasing the mobile application.
- Open Settings.
- Find Status.
- Select Apply for Production.
- Complete the production-readiness form.
- Supply the application website.
- Supply the privacy policy.
- Supply an accurate app description.
- Explain why the selected permissions are required.
- Explain that access is restricted to the Dropbox App Folder.
- Submit the application for review.
- Correct any issues Dropbox reports.
- Resubmit when necessary.
Dropbox development applications support only a limited number of users.
Dropbox states that an application reaching 50 linked users must obtain production approval to continue linking additional users.
Apply for production before the public mobile-app release.
Official references:
DEVELOPER HANDOVER
30. Values Given to the Developer
| Provider | Give the developer | Never embed |
|---|---|---|
| Google Android | Android OAuth client ID and package name | Client secret |
| Google Apple | iOS OAuth client ID and reversed-client URL scheme | Client secret |
| Microsoft | Application client ID and generated MSAL configurations | Client secret or certificate |
| Dropbox | App key and selected scopes | App secret or owner-generated token |
The following are public identifiers and may be included in the mobile application:
- Google Android client ID.
- Google Apple client ID.
- Microsoft Application client ID.
- Dropbox App key.
- Android package name.
- Apple Bundle ID.
- Registered callback schemes.
The following must remain confidential:
- User access tokens.
- User refresh tokens.
- Provider app secrets.
- Owner-generated testing tokens.
- User passwords.
- Backup-encryption keys.
- Recovery keys.
- Private signing keys.
APPLICATION IMPLEMENTATION REQUIREMENTS
31. Authentication Requirements
The developer must implement:
- Authorization Code with PKCE.
- PKCE method
S256. - A new random code verifier for every authorisation attempt.
- A new random state value for every authorisation attempt.
- State validation after the provider redirects back.
- Provider SDK or system-browser login.
- Secure token storage.
- Token-expiry handling.
- Refresh-token handling.
- User cancellation handling.
- Provider-error handling.
- Account disconnection.
- Provider-token revocation.
- Removal of local tokens after disconnection.
The app must not:
- Ask users for their Google password.
- Ask users for their Microsoft password.
- Ask users for their Dropbox password.
- Display provider login pages in an untrusted WebView.
- store tokens in normal application preferences.
- Store tokens in plain-text files.
- Include provider secrets in compiled code.
- Log OAuth codes or tokens.
- Send OAuth tokens to analytics services.
32. Backup-Security Requirements
OAuth authorises cloud access. OAuth does not encrypt the backup contents.
Before uploading, the mobile app must:
- Create the backup locally.
- Encrypt the complete backup.
- Create a cryptographic checksum.
- Upload only the encrypted backup.
- Upload a versioned manifest.
- Verify the uploaded size and checksum.
- Retain the required number of backup versions.
- Remove obsolete versions according to the retention policy.
- Never upload the encryption key inside the same backup.
Recommended backup structure:
/backups/
manifest.json.enc
backup-2026-08-08T090000Z.bin.enc
backup-2026-08-01T090000Z.bin.enc
backup-2026-07-25T090000Z.bin.enc
The restore process must:
- Download the selected encrypted backup.
- Verify the checksum.
- Decrypt locally on the device.
- Validate the backup format.
- Prevent a corrupt backup from overwriting working local data.
- Create a local safety copy before restoring.
33. Required User Controls
The app must provide:
- Connect Google Drive
- Connect Microsoft OneDrive
- Connect Dropbox
- Connected account display
- Last successful backup date and time
- Last backup result
- Backup-now button
- Restore-backup button
- Available backup versions
- Cloud-storage-space warning
- Disconnect-cloud-storage button
- Delete-cloud-backups option
- Export-recovery-key option where applicable
- Clear explanation that deleting the recovery key may make encrypted backups permanently unreadable
FINAL TESTING
34. Mandatory OAuth Tests
Complete every test before release.
Google Tests
- Connect a Google account that is not a project owner.
- Reject the Google consent request.
- Confirm the app returns safely.
- Approve the Google consent request.
- Upload an encrypted backup.
- Restart the mobile app.
- Confirm the connection remains available.
- Restore the backup.
- Revoke access from the Google Account.
- Confirm the app detects the revoked access.
- Confirm the app requests authorisation again.
- Test the final Android production-signed build.
- Test the final Apple TestFlight build.
Microsoft Tests
- Connect a personal Outlook or Hotmail account.
- Connect a personal OneDrive account.
- Connect a Microsoft 365 work account.
- Reject Microsoft consent.
- Approve Microsoft consent.
- Upload and restore a backup.
- Test token expiry.
- Test silent token renewal.
- Test an organisation that restricts user consent.
- Confirm admin-approval errors are clearly displayed.
- Disconnect the Microsoft account.
- Confirm local tokens are removed.
Dropbox Tests
- Connect a Dropbox account that does not own the developer app.
- Reject Dropbox authorisation.
- Approve Dropbox authorisation.
- Confirm the app can access only its App Folder.
- Upload an encrypted backup.
- Restore the backup.
- Test refresh-token operation.
- Revoke Dropbox access.
- Confirm the app requests authorisation again.
- Disconnect the account.
- Confirm local tokens are removed.
35. Mandatory Backup Failure Tests
Test:
- No internet connection.
- Very slow internet connection.
- Interrupted upload.
- Interrupted download.
- Expired access token.
- Revoked refresh token.
- Full cloud-storage quota.
- User deletes the app folder.
- User deletes a backup file.
- User reinstalls the mobile app.
- User changes cloud accounts.
- User connects the wrong account.
- Duplicate backup names.
- Corrupt backup file.
- Incorrect recovery key.
- Mobile device runs out of storage.
- App closes during backup.
- Device restarts during backup.
- Background task is stopped by Android or iOS.
- Cloud provider returns an API rate-limit error.
- Cloud provider is temporarily unavailable.
36. Release Checklist
- Google production project created.
- Google Drive API enabled.
- Google audience set to External.
- Google branding completed.
- Google domain verified.
- Google privacy policy accepted.
- Google non-sensitive Drive scope selected.
- Google Android production client created.
- Google Apple client created.
- Google verification completed.
- Google project moved to Production.
- Microsoft multitenant app registered.
- Personal Microsoft accounts enabled.
- Microsoft delegated AppFolder permission selected.
- Microsoft Android configuration completed.
- Microsoft Apple configuration completed.
- Microsoft public-client flow enabled.
- Microsoft publisher domain verified.
- Microsoft Publisher Verification completed where required.
- Dropbox Scoped Access selected.
- Dropbox App Folder selected.
- Dropbox minimum permissions selected.
- Dropbox implicit grant disabled.
- Dropbox branding completed.
- Dropbox production approval received.
- No client secrets are embedded in the mobile app.
- PKCE S256 is enabled for every provider.
- Tokens are stored in Android Keystore or Apple Keychain.
- Backups are encrypted before upload.
- Backup checksums are verified.
- Cloud disconnection works.
- Provider revocation works.
- Privacy policy matches actual application behaviour.
- Tokens and encryption keys are excluded from logs.
- Production Android signing has been tested.
- Production Apple build has been tested.
