The Holy Grail of IAM: Getting to Grips with Authorization
David Brossard
Sr. Director, Prod. Mgmt, Identity,
Salesforce
JUNE 2021
England Somewhere Online
2021 A.D.
JUNE 2021
HTTP 401 Unauthorized
Not quite...
HTTP 401 is a misnomer...
What you meant is 403
Authorization is when you get authentication wrong!
JUNE 2021
OAuth
Open Authorization
Not quite...
OAuth is about access delegation: I grant an entity X access to some of my data / processes in another entity Y.
So, surely, OAuth is the de facto standard for authorization, right?
JUNE 2021
Authorization...
is about granting or denying an entity access to another entity
The pesky French
JUNE 2021
Definition & Requirements
Background
JUNE 2021
What is Authorization?
TL; DR Authentication confirms that users are who they say they are. Authorization gives those users permission to access a resource.
More broadly…
Authentication is about proving a claim about someone or something. Usually it’s a person’s identity. But it could also be an attribute of that person e.g. their date of birth.
Authorization is the process of granting (or denying) someone or something access to something else. Authorization needs to consider what we know about the requestor and the requested item before granting access.
JUNE 2021
Why the Holy Grail?
Unlike authentication, authorization is not just about who you are.
JUNE 2021
Grant or deny users access to entities
Use a framework that can adapt to future needs
What could happen? What did happen?
1. Configurable & Decoupled
2. Future-Proof
5. Auditable
Five Authorization Requirements
JUNE 2021
Authorization Venn
Identity
Entity
Context
JUNE 2021
Can a user view accounts (as a whole)?
Can Alice view account #123?
Which accounts can Alice view?
Functional
Transactional
Data-centric
What are the different kinds?
JUNE 2021
The enterprise defines a set of policies that determine what should happen.
Users define who can access their data & processes
Enterprise-driven
User-driven
Who defines authorization?
JUNE 2021
Access rights are evaluated just-in-time
Access rights are granted when the user is created
Runtime
Design-time
When do we authorize?
JUNE 2021
Rule of thumb: if you want to report on it and audit it, then it belongs to the authorization realm.
Authorization
Business Logic
Drawing the line between...
JUNE 2021
Why even bother?
Roles are enough
I can do all of that in code!
I said policies!
JUNE 2021
Models, Standards, & Frameworks
Existing Approaches
JUNE 2021
A few definitions
JUNE 2021
Celestial globe with stand, British Museum
JUNE 2021
Ye Olde Authorization Graph
Authorization
Standards
Frameworks
OASIS
IETF
NIST
Kantara
SAML
XACML
CNCF
OAuth
JWT AT
RAR
GNAP
JSON Profile
ALFA
NGAC
Models
RBAC
ABAC
OPA
UMA
NIST
Language-specific
Vendor-specific
AWS ABAC
SDDL
Spring Security
Ruby Cancancan
...
Polar (Oso)
HL7
FHIR
Industry Standards
ACL
JUNE 2021
Standards, Frameworks & Models Timeline
XACML
(also SAML)
(still not dead)
1992
2001
NGAC
INCITS 499
2013
UMA v.1
2015
2014
ALFA �Profile of XACML
2012
2017
RBAC
ABAC
Open Policy Agent
(Rego)
2016
OAuth 2.0
JSON Profile of XACML
2020
GNAP*
OAuth 2.0
(WIP)
JWT AT
OAuth 2.0
(WIP)
2021
OAuth RAR
OAuth 2.0
(WIP)
Zanzibar
(Google)
2019
UMA v.2
2018
ACL
*I wasn’t born then so I cannot remember but I think Gerry Gebel was around
Years ago*
JUNE 2021
The Knights who say NIST
NIst
JUNE 2021
Identity-derived AuthZ
Behold your humble servant, Sir Lancelot of Camelot.
I am a Knight of King Arthur, sir.
Standards
OASIS
IETF
Kantara
SAML
OAuth
JWT AT
RAR
GNAP
UMA
JUNE 2021
GNAP in a in a nut 🥥 shell
JUNE 2021
JWT AT in a nut 🥥 shell
The coconut
It is I, Arthur...
son of Uther Pendragon
… from the castle of Camelot
King of the Britons
… defeator of the Saxons
sovereign of all England!
JUNE 2021
OAuth 2.0 Rich Authorization Requests (RAR)
JUNE 2021
Example
[
{
"type": "account_information",
"actions": [
"list_accounts",
"read_balances",
"read_transactions"
],
"locations": [
"https://example.com/accounts"
]
},
{
"type": "payment_initiation",
"actions": [
"initiate",
"status",
"cancel"
],
"locations": [
"https://example.com/payments"
],
"instructedAmount": {
"currency": "EUR",
"amount": "123.50"
},
"creditorName": "Merchant123",
"creditorAccount": {
"iban": "DE02100100109307118603"
},
"remittanceInformationUnstructured": "Ref Number Merchant"
}
]
JUNE 2021
User-Managed Access
A different kind of knight
JUNE 2021
Relationship-based sharing use case
King Arthur uses Scroll OnlineTM to share data on the Grail
Lancelot is a freelance knight mercenary
King A. hires Lancelot
Lancelot tries to access Grail data
Arthur shares a subset of data with Lancelot
A & L fight over Guinevere
Arthur unshares all data from Lancelot in one step
Scroll Online sharing ends and Arthur can prove it to Merlin
Lancelot gets access to sensitive Grail data
JUNE 2021
Identity-centric AuthZ Limitations
JUNE 2021
Role explosion
Scope explosion
Token bloat
JUNE 2021
JUNE 2021
Knights of the Authorization Round Table
Identify your requirements:
I want to build an app to browse bank accounts and make transfers
Identify your authZ requirements:
A user can view their own accounts. A user can transfer up to $500.
Identify the attributes:
account owner, balance...
Implement your policies:
In ALFA, XACML, OPA...
Design & deploy your architecture:
Decide what enforcement you will use and where
Audit:
What did happen? What could happen?
JUNE 2021
ABAC
ABAC defines:
ABAC is a logical access control methodology where authorization to perform a set of operations is determined by evaluating attributes associated with the subject, object, requested operations, and, in some cases, environment conditions against policy, rules, or relationships that describe the allowable operations for a given set of attributes.
JUNE 2021
Architecture
JUNE 2021
XACML
JUNE 2021
I'm not dead!
I'm getting better
Bring out yer dead
Here’s one!
The Internet
XACML
The Analyst
JUNE 2021
ALFA (the better XACML)
namespace example{
policy article{
target clause itemType=="article"
apply firstApplicable
rule editArticle{
target clause actionId == "edit" and userRole == "editor"
permit
condition userId == owner
}
}
}
JUNE 2021
NGAC
JUNE 2021
Open Policy Agent (OPA)
JUNE 2021
Key Differences between XACML / ALFA and OPA
JUNE 2021
Mix & Match
Infrastructure (Kubernetes…)
App
API
OPA
PDP
ALFA
REGO
Governance Layer?
PIP: UMA Consent
OAuth AS
OAuth RAR
JUNE 2021
The challenge with ABAC
JUNE 2021
Tying OAuth with ABACpick your flavor
Application (Client)
User�(Resource Owner)
Authorization Server (AS)
Resource Server (RS)
Policy Enforcement (PEP) Point
Policy Enforcement (PEP) Point
Policy Decision Point (PDP)
Can it be used to provision dynamically generated claims?
Use the traditional ABAC architecture to enforce at runtime
1. Authorization request
3. Authorization grant
2. Authorization grant
4. Access token
5. Access token
JUNE 2021
OAuth, RAR, and ABAC
Application (Client)
Authorization Server (AS)
Resource Server (RS)
Policy Enforcement (PEP) Point
Policy Decision Point (PDP)
Relay the RAR to the PDP
3. Authorization grant
4. Access token
5. Access token
JUNE 2021
A European Swallow or an African Swallow?
Zanzibar
JUNE 2021
In comes Google’s Zanzibar
JUNE 2021
Catching up with my neighbor (the graficionado)
JUNE 2021
My favorite color is red… no blue
(aka I’m still confused)
JUNE 2021
The AuthZ Grail
Authorization
Authorization
JUNE 2021
Thanks to these helpful knights
Justin Richer
Independent consultant
Gal Helemski Co-founder PlainID
Amit Kanfer
Co-Founder & CEO - build.security
Jacob Moshenko
Co-Founder - Authzed
Srijith Nair
Chief Strategy Officer - Axiomatics
Prabath Siriwardena - Deputy CTO WSO2
Sulay Shah
Product Mgmt, IAM - AWS
Ward Duchamps, CEO Scaled Access
JUNE 2021
Additional reading
JUNE 2021
What... is your favorite authorization standard?
JUNE 2021