IP Library Granted Patent US 12,386,684
Granted Patent B1
US 12,386,684 · App. 16/050,119 · Granted Aug 12, 2025

System for authorizing API calls

Inventors: Timothy L. Hinrichs (Los Altos, CA); Teemu Koponen (San Francisco, CA); Andrew Curtis (San Mateo, CA); Torin Sandall (San Francisco, CA); Octavian Florescu (Kirkland, WA)
Assignee: STYRA, INC.
G06F9/54G06F9/45533G06F16/122G06F21/30
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,386,684
App. No.
16/050,119
Granted
Aug 12, 2025
Kind
B1
Abstract

Some embodiments of the invention provide a system for defining, distributing and enforcing policies for authorizing API (Application Programming Interface) calls to applications executing on one or more sets of associated machines (e.g., virtual machines, containers, computers, etc.) in one or more datacenters. This system has servers that act as a logically centralized resource for defining and storing policies and parameters for evaluating these policies. The servers enforce these policies and distribute the policies and parameters to policy-enforcing local agents that execute near the applications that process the API calls. From an associated application, a local agent receives API-authorization requests to determine whether API calls received by the application are authorized. In response to such a request, the local agent uses one or more parameters associated with the API call to identify a policy stored in its local policy storage to evaluate whether the API call should be authorized. To evaluate this policy, the agent also retrieves one or more parameters from the local policy storage.

Claims (43)

1. A system for authorizing API (Application Programming Interface) calls, the system comprising:

a plurality of computers, each computer executing (i) at least one application that receives API calls and (ii) at least one local API-authorizing agent to authorize API calls received by the at least one application executing on the same computer; and

a set of servers to receive API-authorization policies and parameters for evaluating the policies and to distribute the policies and parameters to the local agents to use to authorize the API calls received by applications executing on the same computers as the local agents,

wherein each respective application of a plurality of applications executing on a particular computer processes API calls received by the respective application by (i) directing the received API calls to a respective local API-authorizing agent executing on the same particular computer as the respective application for the respective local API-authorizing agent to authorize the API calls for processing by the respective application, (ii) receiving authorization decisions for the API calls from the respective local API-authorizing agent, and (iii) for each API call authorized by the respective local API-authorizing agent, performing an operation specified by the API call at the application and sending a message to a source of the API call to indicate that the operation was performed,

wherein the local API-authorizing agents executing on the particular computer authorize the API calls by (i) identifying, for each particular API call of a plurality of the API calls, an API-authorization policy applicable to the particular API call and (ii) evaluating the identified API-authorization policy for the particular API call,

wherein a particular local API-authorizing agent on the particular computer (i) uses a first set of parameters associated with a particular API call to retrieve, from a single storage structure that stores both API-authorization policies and parameters for evaluating policies, at least one API-authorization policy and a second set of parameters for evaluating the retrieved API-authorization policy, and (ii) uses the retrieved second set of parameters to evaluate the retrieved API-authorization policy in order to determine whether the particular API call should be approved,

wherein the particular local API-authorizing agent receives the single storage structure from the set of servers.

2. The API-authorizing system of claim 1 , wherein the parameters in the storage structure include at least one parameter received from a local data collector that executes on the same particular computer as the particular local API-authorizing agent, said parameter received from the local data collector comprising confidential data not provided to the server set.

3. The API-authorizing system of claim 1 , wherein the single storage structure is a hierarchical storage structure that allows each respective API-authorization policy and a respective set of parameters associated with the respective policy to be retrieved by providing a respective location in the hierarchical storage structure that stores the respective policy.

4. The API-authorizing system of claim 3 , wherein the storage structure is a namespace.

5. The API-authorizing system of claim 3 , wherein:

the hierarchical storage structure is a namespace; and

the location that stores a particular policy also stores one of (i) the set of parameters for evaluating the particular policy and (ii) a name of a location in the namespace at which the set of parameters for evaluating the particular policy has been previously stored in the namespace.

6. The API-authorizing system of claim 1 , wherein:

each computer further executes at least one authenticating agent to authenticate the API calls received by the at least one application executing on the same computer; and

each respective application executing on the particular computer further processes received API calls by directing the API calls to a respective authenticating agent for authentication prior to directing the API calls to the respective API-authorizing agent for authorization.

7. The API-authorizing system of claim 1 , wherein the set of servers further authorizes API calls for a subset of the applications executing on the plurality of computers.

8. The API-authorizing system of claim 7 , wherein a subset of the local API-authorizing agents relay API authorization requests from the subset of the applications to the set of servers.

9. The API-authorizing system of claim 1 , wherein the received API calls are for (i) a first set of applications that provide infrastructure logic and (ii) a second set of applications that provide domain logic that specifies domain rules for creating, storing, and manipulating data relating to core functions of an enterprise.

10. The API-authorizing system of claim 1 , wherein the set of servers executes a set of data-source adapters to collect a subset of the parameters.

11. A system for authorizing API (Application Programming Interface) calls, the system comprising:

a plurality of computers, each computer executing (i) at least one application that receives API calls and (ii) at least one local API-authorizing agent to authorize API calls received by the at least one application executing on the same computer; and

a set of servers to receive API-authorization policies and parameters for evaluating the policies and to distribute the policies and parameters to the local agents to use to authorize the API calls received by applications executing on the same computers as the local agents,

wherein each respective application of a plurality of applications executing on a particular computer processes API calls received by the respective application by (i) directing the received API calls to a respective local API-authorizing agent executing on the same particular computer as the respective application for the respective local API-authorizing agent to authorize the API calls for processing by the respective application, (ii) receiving authorization decisions for the API calls from the respective local API-authorizing agent, and (iii) for each API call authorized by the respective local API-authorizing agent, performing an operation specified by the API call at the application and sending a message to a source of the API call to indicate that the operation was performed,

wherein the local API-authorizing agents executing on the particular computer authorize the API calls by (i) identifying, for each particular API call of a plurality of the API calls, an API-authorization policy applicable to the particular API call and (ii) evaluating the identified API-authorization policy for the particular API call,

wherein the set of servers receives records expressing the API authorization decisions made by the local agents and stores the received records in a set of data storages for querying to examine API authorizations decisions made by the local agents.

12. The API-authorizing system of claim 11 , wherein a particular local API-authorizing agent on the particular computer (i) uses a first set of parameters associated with a particular API call to retrieve, from a single storage structure that stores both API-authorization policies and parameters for evaluating policies, at least one API-authorization policy and a second set of parameters for evaluating the retrieved API-authorization policy, and (ii) uses the retrieved second set of parameters to evaluate the retrieved API-authorization policy in order to determine whether the particular API call should be approved.

13. The API-authorizing system of claim 12 , wherein the particular local API-authorizing agent receives the single storage structure from the set of servers.

14. A system for authorizing API (Application Programming Interface) calls, the system comprising:

a plurality of computers, each computer executing (i) at least one application that receives API calls and (ii) at least one local API-authorizing agent to authorize API calls received by the application executing on the same computer; and

a set of servers to receive API-authorization policies and parameters for evaluating the policies and to distribute the policies and parameters to the local agents to use to authorize the API calls received by applications executing on the same computers as the local agents,

wherein each respective application of a plurality of applications executing on a particular computer processes API calls received by the respective application by (i) directing the received API calls to a respective local API-authorizing agent executing on the same particular computer as the respective application for the respective local API-authorizing agent to authorize the API calls for processing by the respective application and (ii) receiving authorization decisions for the API calls from the respective local API-authorizing agent,

wherein at least a first application executing on the particular computer directs received API calls to a first local API-authorizing agent executing on the particular computer and a second application executing on the particular computer directs received API calls to a second local API-authorizing agent executing on the particular computer,

wherein the first local API-authorizing agent authorizes API calls made to the first application and a first plurality of additional applications executing on the particular computer while the second local API-authorizing agent authorizes API calls made to the second application and a second plurality of additional applications executing on the particular computer,

wherein the local API-authorizing agents executing on the particular computer authorize the API calls by (i) identifying, for each particular API call of a plurality of the API calls, an API-authorization policy applicable to the particular API call and (ii) evaluating the identified API-authorization policy for the particular API call.

15. The API-authorizing system of claim 14 , wherein:

the set of servers distributes (i) a first storage structure storing a first set of policies and parameters to the first local API-authorizing agent and (ii) a second, different storage structure storing a second, different set of policies and parameters to the second local API-authorizing agent; and

the first local API-authorizing agent requires a different set of API-authorization policies and parameters to authorize the API calls received by the first application than the second local API-authorizing requires to authorizes the API calls received by the second application.

16. The API-authorizing system of claim 14 , wherein:

the first application, the first plurality of additional applications, and the first local API-authorizing agent execute within a first virtual machine or container on the particular computer; and

the second application, the second plurality of additional applications, and the second local API-authorizing agent execute within a second virtual machine or container on the particular computer.

17. The API-authorizing system of claim 14 , wherein the server set distributes API-authorization policies and parameters to a plurality of computers executing machines for a particular tenant in a multi-tenant datacenter.

18. The API-authorizing system of claim 14 , wherein the server set distributes API-authorization policies and parameters to a plurality of computers executing machines for a plurality of different tenants in a multi-tenant datacenter.

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 Dec 4, 2018
From: HINRICHS, TIMOTHY L.; KOPONEN, TEEMU; CURTIS, ANDREW; SANDALL, TORIN; FLORESCU, OCTAVIAN
To: STYRA, INC.
Reel/Frame 047668/0693 →
Continuity (2)
Provisional Application 62545458 · Aug 14, 2017
Provisional Application 62540547 · Aug 2, 2017
References Cited (163)
US 5974549A · Golan · 1999 [cited by applicant]
US 6460141B1 · Olden · 2002 [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 7865931B1 · Stone · 2011 [cited by examiner]
US 7913300B1 · Flank et al. · 2011 [cited by applicant]
US 7937755B1 · Guruswamy · 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 8850528B2 · Biljon et al. · 2014 [cited by applicant]
US 9106661B1 · Stamos · 2015 [cited by applicant]
US 9374417B1 · Greenfield et al. · 2016 [cited by applicant]
US 9397990B1 · Taly et al. · 2016 [cited by applicant]
US 9420002B1 · McGovern et al. · 2016 [cited by applicant]
US 9521032B1 · Worsley · 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 9948681B1 · Kruse et al. · 2018 [cited by applicant]
US 10021103B2 · Xu et al. · 2018 [cited by applicant]
US 10122757B1 · Kruse et al. · 2018 [cited by applicant]
US 10127393B2 · Ferraiolo et al. · 2018 [cited by applicant]
US 10148493B1 · Ennis, Jr. 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 10263995B1 · Kruse et al. · 2019 [cited by applicant]
US 10339303B2 · Mehta et al. · 2019 [cited by applicant]
US 10353726B2 · Duan · 2019 [cited by applicant]
US 10454975B1 · Sharifi 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 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 11494518B1 · Curtis · 2022 [cited by examiner]
US 11496517B1 · Hinrichs et al. · 2022 [cited by applicant]
US 11509658B1 · Kulkarni · 2022 [cited by applicant]
US 11604684B1 · Hinrichs et al. · 2023 [cited by applicant]
US 11681568B1 · Hinrichs et al. · 2023 [cited by applicant]
US 11741244B2 · Sandall et al. · 2023 [cited by applicant]
US 11762712B2 · Koponen et al. · 2023 [cited by applicant]
US 11847241B1 · Cahill et al. · 2023 [cited by applicant]
US 11853463B1 · Hinrichs et al. · 2023 [cited by applicant]
US 12118102B1 · Sandall et al. · 2024 [cited by applicant]
US 20030115484A1 · Moriconi et al. · 2003 [cited by applicant]
US 20030220925A1 · Lior · 2003 [cited by applicant]
US 20040083367A1 · Garg et al. · 2004 [cited by applicant]
US 20050081058A1 · Chang et al. · 2005 [cited by applicant]
US 20050114674A1 · Carley · 2005 [cited by examiner]
US 20060053290A1 · Randle · 2006 [cited by examiner]
US 20060059569A1 · Dasgupta et al. · 2006 [cited by applicant]
US 20070006325A1 · Gargaro · 2007 [cited by applicant]
US 20070156670A1 · Lim · 2007 [cited by applicant]
US 20070226320A1 · Hager · 2007 [cited by examiner]
US 20080022357A1 · Agarwal et al. · 2008 [cited by applicant]
US 20080184336A1 · Sarukkai et al. · 2008 [cited by applicant]
US 20090019533A1 · Hazlewood et al. · 2009 [cited by applicant]
US 20090055749A1 · Chatterjee · 2009 [cited by examiner]
US 20090063665A1 · Bagepalli et al. · 2009 [cited by applicant]
US 20090077618A1 · Pearce et al. · 2009 [cited by applicant]
US 20090138960A1 · Felty et al. · 2009 [cited by applicant]
US 20090281996A1 · Liu et al. · 2009 [cited by applicant]
US 20100095373A1 · Levenshteyn et al. · 2010 [cited by applicant]
US 20100333079A1 · Sverdlov et al. · 2010 [cited by applicant]
US 20110113484A1 · Zeuthen · 2011 [cited by examiner]
US 20120030354A1 · Razzaq et al. · 2012 [cited by applicant]
US 20120066487A1 · Brown · 2012 [cited by examiner]
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 20130227636A1 · Bettini et al. · 2013 [cited by applicant]
US 20130283370A1 · Vipat et al. · 2013 [cited by applicant]
US 20130305354A1 · King et al. · 2013 [cited by applicant]
US 20140032691A1 · Barton et al. · 2014 [cited by applicant]
US 20140032733A1 · Barton et al. · 2014 [cited by applicant]
US 20140032759A1 · Barton et al. · 2014 [cited by applicant]
US 20140033267A1 · Aciicmez · 2014 [cited by applicant]
US 20140181186A1 · Stevens · 2014 [cited by examiner]
US 20140237594A1 · Thakadu et al. · 2014 [cited by applicant]
US 20140372986A1 · Levin · 2014 [cited by examiner]
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 20160057027A1 · Hinrichs et al. · 2016 [cited by applicant]
US 20160057107A1 · Call et al. · 2016 [cited by applicant]
US 20160103870A1 · Patiejunas et al. · 2016 [cited by applicant]
US 20160188898A1 · Karinta et al. · 2016 [cited by applicant]
US 20160205101A1 · Verma et al. · 2016 [cited by applicant]
US 20160352695A1 · Kozolchyk et al. · 2016 [cited by applicant]
US 20160373455A1 · Shokhrin · 2016 [cited by examiner]
US 20160381032A1 · Hashmi et al. · 2016 [cited by applicant]
US 20170024428A1 · Patiejunas et al. · 2017 [cited by applicant]
US 20170075938A1 · Black et al. · 2017 [cited by applicant]
US 20170111336A1 · Davis et al. · 2017 [cited by applicant]
US 20170124166A1 · Thomas et al. · 2017 [cited by applicant]
US 20170142068A1 · Devarajan 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 20170279805A1 · Diaz-Cuellar et al. · 2017 [cited by applicant]
US 20170302655A1 · Sondhi · 2017 [cited by examiner]
US 20170331629A1 · Kozolchyk et al. · 2017 [cited by applicant]
US 20170346807A1 · Blasi · 2017 [cited by applicant]
US 20170364702A1 · Goldfarb et al. · 2017 [cited by applicant]
US 20180062858A1 · Xu et al. · 2018 [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 20180295036A1 · Krishnamurthy 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 20190020665A1 · Surcouf 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 20230094066A1 · Hecht · 2023 [cited by examiner]
US 20240004728A1 · Hinrichs et al. · 2024 [cited by applicant]
Non-Published commonly Owned U.S. Appl. No. 16/050,123, filed Jul. 31, 2018, 56 pages, Styra, Inc. [cited by applicant]
Non-Published commonly Owned U.S. Appl. No. 16/050,124, filed Jul. 31, 2018, 56 pages, Styra, Inc. [cited by applicant]
Non-Published commonly Owned U.S. Appl. No. 16/050,127, filed Jul. 31, 2018, 56 pages, Styra, Inc. [cited by applicant]
Non-Published commonly Owned U.S. Appl. No. 16/050,130, filed Jul. 31, 2018, 56 pages, Styra, Inc. [cited by applicant]
Non-Published commonly Owned U.S. Appl. No. 16/050,136, filed Jul. 31, 2018, 57 pages, Styra, Inc. [cited by applicant]
Non-Published commonly Owned U.S. Appl. No. 16/050,139, filed Jul. 31, 2018, 56 pages, Styra, Inc. [cited by applicant]
Non-Published commonly Owned U.S. Appl. No. 16/050,143, filed Jul. 31, 2018, 56 pages, Styra, Inc. [cited by applicant]
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. 18/120,810, filed Mar. 13, 2023, 63 pages, Styra, Inc. [cited by applicant]
Non-Published Commonly Owned U.S. Appl. No. 18/239,714, filed Aug. 29, 2023, 68 pages, Styra, Inc. [cited by applicant]
Non-Published Commonly Owned U.S. Appl. No. 18/369,471, filed Sep. 18, 2023, 74 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]
Preuveneers, Davy, et al., “Access Control with Delegated Authorization Policy Evaluation for Data-Driven Microservice Workflows,” Future Internet, Sep. 30, 2017, 21 pages, vol. 9, Multidisciplinary Digital Publishing I… [cited by applicant]
Wei, Hao, et al., “Enhance OpenStack Access Control via Policy Enforcement Based on XACML,” In Proceedings of the 16th International Conference on Enterprise Information Systems, Apr. 2014, 7 pages, vol. 1, SciTePress, … [cited by applicant]