IP Library Granted Patent US 12,437,057
Granted Patent B1
US 12,437,057 · App. 18/114,186 · Granted Oct 7, 2025

Portable policy execution using embedded machines

Inventors: Torin Sandall (San Francisco, CA); Timothy L Hinrichs (Los Altos, CA); Teemu Koponen (San Francisco, CA)
Assignee: Apple Inc.
G06F21/54G06F9/45558G06F9/547G06F21/629H04L63/102H04L63/20G06F2009/45595G06F2221/033
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,437,057
App. No.
18/114,186
Granted
Oct 7, 2025
Kind
B1
Abstract

Some embodiments provide a method for evaluating authorization policies that restrict access to API (Application Programming Interfaces) calls to an application executing on a host system. At the application, the method receives an API call to execute. The method directs a process virtual machine (VM) executing inside the application to make an authorization decision for the API call. The method executes the API call after receiving an authorization decision to allow the API call from the process VM executing inside the application.

Claims (53)

1. A method for evaluating authorization policies that define access to APIs (Application Programming Interfaces) of an application that executes on a machine that is one of a plurality of machines operating on a host computer, the method comprising:

at a process virtual machine (VM) executing within the application that executes on the machine operating on the host computer:

receiving a request from a module of the application, within which the process VM executes, to authorize an API call that the application receives and that is to be executed by the application;

generating an authorization decision for the API call by using a binary process executing within the process VM; and

sending, to the module of the application from which the request is received, an authorization decision to allow the API call, wherein the application executes the requested API call after receiving the authorization decision to allow the API call.

2. The method of claim 1 , wherein the application comprises a native API authorization module executing within the application alongside the process VM the module from which the request is received is a different module than the native API authorization module.

3. The method of claim 1 , wherein the binary process comprises a first set of instructions that is not native to the application, wherein the binary process is executed by the process VM by interpreting each instruction in the first set of instructions as an instruction in a second set of instructions in a second language that is native to the application.

4. The method of claim 1 , wherein the binary process comprises a first set of instructions that is not native to the application, wherein the binary process is executed by the process VM by translating the first set of instructions into a code and compiling the translated code into a second set of instructions that is native to the application.

5. The method of claim 4 , wherein the translated code is optimized for the application before being compiled into the second set of instructions.

6. A method for evaluating authorization policies that define access to APIs (Application Programming Interfaces) of an application that executes on a machine that is one of a plurality of machines operating on a host computer, the method comprising:

at a process virtual machine (VM) executing within the application:

receiving a request from the application, within which the process VM executes, to authorize an API call to be executed by the application;

generating an authorization decision for the API call by (i) generating a set of binary instructions from an API authorization policy code and (ii) authorizing the API call by executing the set of binary instructions; and

sending, to the application within which the process VM executes, an authorization decision to allow the API call, wherein the application executes the requested API call after receiving the authorization decision to allow the API call.

7. The method of claim 6 further comprising:

receiving a set of contextual data associated with the API authorization policy code; and

using at least a subset of the received set of contextual data as an input to the set of binary instructions.

8. The method of claim 7 further comprising identifying at least a portion of the contextual data by using a set of parameters associated with the API call, wherein at least one of the parameters is received by the process VM along with the request from the application.

9. The method of claim 6 , wherein authorizing the API call by executing the set of binary instructions comprises, for each binary instruction in the set of binary instructions:

translating the binary instruction into a binary instruction that is native to the application, and

executing the translated native instruction.

10. The method of claim 6 , wherein the set of binary instructions is a first set of binary instructions, wherein authorizing the API call by executing the set of binary instructions comprises:

translating the first set of binary instructions into a code;

optimizing the translated code for at least one of (i) the application within which the process VM executes and (ii) the host, computer;

compiling the optimized translated code into a second set of binary instructions that are native to the application, and

executing the native second set of binary instructions.

11. The method of claim 6 , wherein generating the set of binary instructions from the API authorization policy code comprises:

evaluating a portion of the API authorization policy code; and

compiling the API authorization policy code.

12. The method of claim 6 , wherein:

generating the set of binary instructions from the API authorization code comprises using one or more policy extension codes in addition to the API authorization policy code to generate the set of binary instructions;

the policy extension codes define extensions to the API authorization policy; and

at least one of the policy extension codes is in a different language than the API authorization policy code.

13. The method of claim 1 , wherein the application comprises a native API authorization module executing within the application alongside the process VM and the request is received from the native API authorization module.

14. A method for evaluating authorization policies that define access to APIs (Application Programming Interfaces) of an application executing on a host system, the method comprising:

at a process virtual machine (VM) executing as a runtime interpreter for an instruction set inside the application:

receiving a request from the application to authorize an API call to be executed by the application;

generating an authorization decision for the API call; and

sending, to the application, an authorization decision to allow the API call, wherein the application executes the requested API call after receiving the authorization decision to allow the API call.

15. The method of claim 14 , wherein the instruction set is one of WebAssembly (WASM), Lua, or extended Berkeley Packet Filter (eBPF).

16. A non-transitory machine readable medium storing a process virtual machine (VM) executing within an application that is one of a plurality of machines executing on a host computer, the process VM for evaluating authorization policies that define access to APIs (Application Programming Interfaces) of the application within which the process VM executes, the process VM comprising sets of instructions for:

receiving a request from a module of the application, within which the process VM executes, to authorize an API call that the application receives and that is to be executed by the application;

generating an authorization decision for the API call by using a binary process executing within the process VM; and

sending, to the module of the application from which the request is received, an authorization decision to allow the API call, wherein the application executes the requested API call after receiving the authorization decision to allow the API call.

17. The non-transitory machine-readable medium of claim 16 , wherein the application comprises a native API authorization module executing within the application alongside the process VM and the module from which the request is received is a different module than the native API authorization module.

18. A non-transitory machine readable medium storing a process virtual machine (VM) executing inside an application that executes on a host computer, the process VM for evaluating authorization policies that define access to APIs (Application Programming Interfaces) of the application executing on the host computer, the process VM comprising sets of instructions for:

receiving a request from the application to authorize an API call to be executed by the application;

generating an authorization decision for the API call by (i) generating a set of binary instructions from an API authorization policy code and (ii) authorizing the API call by executing the set of binary instructions; and

sending, to the application, an authorization decision to allow the API call, wherein the application executes the requested API call after receiving the authorization decision to allow the API call.

19. The non-transitory machine readable medium of claim 18 , wherein the process VM further comprises sets of instructions for:

receiving a set of contextual data associated with the API authorization policy code; and

using at least a subset of the received set of contextual data as an input to the set of binary instructions.

20. The non-transitory machine-readable medium of claim 16 , wherein the application comprises a native API authorization module executing within the application alongside the process VM and the request is received from the native API authorization module.

Assignments (3)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 5, 2025
From: STYRA, INC.
To: APPLE INC.
Reel/Frame 072818/0489 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 19, 2025
From: STYRA, INC.
To: APPLE INC.
Reel/Frame 072522/0568 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 13, 2025
From: HINRICHS, TIMOTHY L.; SANDALL, TORIN; KOPONEN, TEEMU
To: STYRA, INC.
Reel/Frame 072013/0168 →
Continuity (4)
Continuation 16773923 · Jan 27, 2020
Provisional Application 62892735 · Aug 28, 2019
Provisional Application 62855726 · May 31, 2019
Provisional Application 62846461 · May 10, 2019
References Cited (105)
US 5974549A · Golan · 1999 [cited by applicant]
US 6985953B1 · Sandhu et al. · 2006 [cited by applicant]
US 7096367B2 · Garg et al. · 2006 [cited by applicant]
US 7124192B2 · High, Jr. et al. · 2006 [cited by applicant]
US 7752661B2 · Hemsath et al. · 2010 [cited by applicant]
US 7913300B1 · Flank et al. · 2011 [cited by applicant]
US 8266694B1 · Roy · 2012 [cited by applicant]
US 8613070B1 · Borzycki et al. · 2013 [cited by applicant]
US 8683560B1 · Brooker et al. · 2014 [cited by applicant]
US 8782744B1 · Fuller et al. · 2014 [cited by applicant]
US 8789138B2 · Reierson et al. · 2014 [cited by applicant]
US 9397990B1 · Taly et al. · 2016 [cited by applicant]
US 9530020B2 · Brandwine et al. · 2016 [cited by applicant]
US 9578004B2 · Greenspan et al. · 2017 [cited by applicant]
US 9648040B1 · Morkel et al. · 2017 [cited by applicant]
US 10122757B1 · Kruse et al. · 2018 [cited by applicant]
US 10127393B2 · Ferraiolo et al. · 2018 [cited by applicant]
US 10182129B1 · Peterson et al. · 2019 [cited by applicant]
US 10257184B1 · Mehta et al. · 2019 [cited by applicant]
US 10353726B2 · Duan · 2019 [cited by applicant]
US 10454975B1 · Mehr · 2019 [cited by applicant]
US 10469314B2 · Ennis, Jr. et al. · 2019 [cited by applicant]
US 10574699B1 · Baer et al. · 2020 [cited by applicant]
US 10592302B1 · Hinrichs et al. · 2020 [cited by applicant]
US 10592683B1 · Lim et al. · 2020 [cited by applicant]
US 10715514B1 · Threlkeld · 2020 [cited by applicant]
US 10719373B1 · Koponen et al. · 2020 [cited by applicant]
US 10740470B2 · Ionescu et al. · 2020 [cited by applicant]
US 10789220B2 · Mayer et al. · 2020 [cited by applicant]
US 10984133B1 · Hinrichs et al. · 2021 [cited by applicant]
US 10986131B1 · Kruse et al. · 2021 [cited by applicant]
US 10990702B1 · Hinrichs et al. · 2021 [cited by applicant]
US 11023292B1 · Hinrichs et al. · 2021 [cited by applicant]
US 11080410B1 · Sandall et al. · 2021 [cited by applicant]
US 11108827B2 · Beckman et al. · 2021 [cited by applicant]
US 11108828B1 · Curtis et al. · 2021 [cited by applicant]
US 11170099B1 · Sandall et al. · 2021 [cited by applicant]
US 11228573B1 · Rangasamy et al. · 2022 [cited by applicant]
US 11245728B1 · Curtis et al. · 2022 [cited by applicant]
US 11258824B1 · Hinrichs et al. · 2022 [cited by applicant]
US 11327815B1 · Koponen et al. · 2022 [cited by applicant]
US 11425126B1 · Horal et al. · 2022 [cited by applicant]
US 11496517B1 · Hinrichs et al. · 2022 [cited by applicant]
US 11509658B1 · Kulkarni · 2022 [cited by applicant]
US 11516253B1 · Van Deman et al. · 2022 [cited by applicant]
US 11593525B1 · Sandall · 2023 [cited by examiner]
US 11604684B1 · Hinrichs et al. · 2023 [cited by applicant]
US 11847241B1 · Cahill et al. · 2023 [cited by applicant]
US 20040083367A1 · Garg et al. · 2004 [cited by applicant]
US 20050114674A1 · Carley · 2005 [cited by applicant]
US 20070156670A1 · Lim · 2007 [cited by applicant]
US 20080184336A1 · Sarukkai et al. · 2008 [cited by applicant]
US 20090063665A1 · Bagepalli et al. · 2009 [cited by applicant]
US 20090077618A1 · Pearce et al. · 2009 [cited by applicant]
US 20090281996A1 · Liu et al. · 2009 [cited by applicant]
US 20100333079A1 · Sverdlov · 2010 [cited by examiner]
US 20110113484A1 · Zeuthen · 2011 [cited by applicant]
US 20120030354A1 · Razzaq et al. · 2012 [cited by applicant]
US 20120066756A1 · Vysogorets et al. · 2012 [cited by applicant]
US 20120311672A1 · Connor et al. · 2012 [cited by applicant]
US 20120331539A1 · Matsugashita · 2012 [cited by applicant]
US 20130226970A1 · Weber et al. · 2013 [cited by applicant]
US 20140032691A1 · Barton et al. · 2014 [cited by applicant]
US 20140032759A1 · Barton et al. · 2014 [cited by applicant]
US 20140033267A1 · Aciicmez · 2014 [cited by applicant]
US 20140237594A1 · Thakadu et al. · 2014 [cited by applicant]
US 20150089575A1 · Vepa et al. · 2015 [cited by applicant]
US 20150213449A1 · Morrison et al. · 2015 [cited by applicant]
US 20150244724A1 · Xu et al. · 2015 [cited by applicant]
US 20160034900A1 · Nelsen et al. · 2016 [cited by applicant]
US 20160057107A1 · Call et al. · 2016 [cited by applicant]
US 20160188898A1 · Karinta et al. · 2016 [cited by applicant]
US 20170024428A1 · Patiejunas et al. · 2017 [cited by applicant]
US 20170111336A1 · Davis et al. · 2017 [cited by applicant]
US 20170161120A1 · Sasaki et al. · 2017 [cited by applicant]
US 20170220370A1 · Klompje et al. · 2017 [cited by applicant]
US 20170237729A1 · Uppalapati · 2017 [cited by applicant]
US 20170302655A1 · Sondhi et al. · 2017 [cited by applicant]
US 20170346807A1 · Blasi · 2017 [cited by applicant]
US 20170364702A1 · Goldfarb et al. · 2017 [cited by applicant]
US 20180067790A1 · Chheda et al. · 2018 [cited by applicant]
US 20180082053A1 · Brown et al. · 2018 [cited by applicant]
US 20180109538A1 · Kumar et al. · 2018 [cited by applicant]
US 20180309746A1 · Blasi · 2018 [cited by applicant]
US 20190007418A1 · Cook et al. · 2019 [cited by applicant]
US 20190007443A1 · Cook et al. · 2019 [cited by applicant]
US 20190080103A1 · Hadzic et al. · 2019 [cited by applicant]
US 20190190959A1 · Yuan · 2019 [cited by applicant]
US 20190230130A1 · Beckman et al. · 2019 [cited by applicant]
US 20190245862A1 · Kruse et al. · 2019 [cited by applicant]
US 20190273746A1 · Coffing · 2019 [cited by applicant]
US 20190386973A1 · Patwardhan et al. · 2019 [cited by applicant]
US 20200007580A1 · Liderman et al. · 2020 [cited by applicant]
US 20210029029A1 · Mehmedagic et al. · 2021 [cited by applicant]
US 20210240550A1 · Hinrichs et al. · 2021 [cited by applicant]
US 20210248017A1 · Hinrichs et al. · 2021 [cited by applicant]
US 20210365571A1 · Sandall et al. · 2021 [cited by applicant]
US 20220269549A1 · Koponen et al. · 2022 [cited by applicant]
Barrio (Study of the techniques for emulation programming, 152 pages, Jun. 18, 2001) (Year: 2001). [cited by examiner]
Author Unknown, “API Best Practices Managing the API Lifecycle: Design, Delivery, and Everything in Between,” Dec. 2016, 37 pages, Apigee, retrieved from https://pages.apigee.com/rs/351-WXY-166/images/API-Best-Practices… [cited by applicant]
Costa, Jeff, “Improve API Performance with Caching,” API Gateway, May 31, 2018, 18 pages, Akamai Developer, retrieved from https://developer.akamai.com/blog/2018/05/31/improve-api-performance-caching. [cited by applicant]
Moffett, Jonathan D., et al., “Policy Hierarchies for Distributed Systems Management,” IEEE Journal on Selected Areas in Communications, Dec. 1993, 11 pages, vol. 11, IEEE, USA. [cited by applicant]
Non-Published commonly Owned U.S. Appl. No. 16/050,119, filed Jul. 31, 2018, 55 pages, Styra, Inc. [cited by applicant]
Non-Published commonly Owned U.S. Appl. No. 18/120,810, filed Mar. 13, 2023, 63 pages, Styra, Inc. [cited by applicant]
Win, Thu Yein, et al., “Virtualization Security Combining Mandatory Access Control and Virtual Machine Introspection,” 2014 IEEE/ACM 7th International Conference on Utility and Cloud Computing, Dec. 8-11, 2014, 6 pages,… [cited by applicant]