Kory Draughn, Chief Technologist
Martin Flores, Software Developer
iRODS Consortium
iRODS HTTP API v0.5.0
June 17-20, 2025
iRODS User Group Meeting 2025
Durham, NC
Updates since UGM 2023
v0.1.0
v0.2.0
v0.3.0
OAuth & OIDC in v0.3.0
User Mapping - Overview
User Mapping - Overview
User Mapping - Plugin Interface
/// Initializes the user mapping plugin.
int user_mapper_init(const char* _args);
/// Matches the given information to a user.
int user_mapper_match(const char* _param, char** _match);
/// Frees a C-string generated from the user mapping plugin.
void user_mapper_free(char* _data);
/// Executes clean-up for the user mapping plugin.
int user_mapper_close();
User Mapping - Local File Configuration Example
...
// Defines relevant information related to the User Mapping plugin system.
// Allows for the selection and configuration of the plugin.
"user_mapping": {
// The full path to the desired plugin to load.
"plugin_path": "/some/path/libirods_http_api_plugin-local_file.so",
// The configuration information required by
// the selected plugin to execute properly.
"configuration": {
"file_path": "/some-file.json"
}
}
...
...
"user_attribute_mapping": {
"rodsBob": {
"email": "bob@bobtopia.example",
"sub": "a.very.real.sub",
"phone_number": "56709"
},
"rodsAlice": {
"email": "al-1s@wonderland.example",
"sub": "a.different.sub"
}
}
...
Old Configuration
New Configuration
User Mapping - Local File Configuration Example
Text
{
"rodsAlice": {
"email": "alice@example.org",
"sub": "123-abc-456-xyz"
},
"rodsBob": {
"email": "bob@example.org",
"phone": "56709"
}
}
Local File Mapping Example
User Mapping User Claim Configuration Example
...
"user_mapping": {
"plugin_path": "/some/path/libirods_http_api_plugin-user_claim.so",
"configuration": {
"irods_user_claim": "irods_username"
}
}
...
...
"irods_user_claim": "irods_username"
...
Old Configuration
New Configuration
Local JWT Access Token Validation
Local JWT Access Token Validation
Local JWT Access Token Validation - Supported Algorithms
Table in Section 3.1 from JWA RFC 7518
Local JWT Access Token Validation - Nonstandard Behavior
HTTP API as an OAuth 2.0 Protected Resource
Example of Protected Resource Communications
HTTP API Local Validation
Example of Local Validation
HTTP API Local Validation
Demo
Future Improvements
References
References
OAuth 2.0 Confidential Client
Alternate User Mapping
Alternate User Mapping
Text
...
"openid_connect": {
...
"user_attribute_mapping": {
"rodsBob": {
"email": "bob@bobtopia.example",
"sub": "a.very.real.sub",
"phone_number": "56709"
},
"rodsAlice": {
"email": "al-1s@wonderland.example",
"sub": "a.different.sub"
}
}
...
}
...
User Mapping Example
Alternate User Mapping
Alternate User Mapping
Text
{
"active": true,
"client_id": "l238j323ds-23ij4",
"username": "jdoe",
"scope": "read write dolphin",
"sub": "Z5O3upPC88QrAjx00dis",
"aud": "https://protected.example.net/resource",
"iss": "https://server.example.com/",
"exp": 1419356238,
"iat": 1419350238,
"extension_field": "twenty-seven"
}
Token Introspection Example
HTTP API as an OAuth 2.0 Protected Resource
HTTP API as an OAuth 2.0 Protected Resource
Example of Protected Resource Communications
Draft Specifications
References
Future Work
High Priority
Medium Priority
Considering
Thank you!
Questions?