Bug 1041893

Summary: [RFE][keystone]: Encrypt OAuth access keys
Product: Red Hat OpenStack Reporter: RHOS Integration <rhos-integ>
Component: RFEsAssignee: RHOS Maint <rhos-maint>
Status: CLOSED UPSTREAM QA Contact:
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: unspecifiedCC: markmc, yeylon
Target Milestone: ---Keywords: FutureFeature
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
URL: https://blueprints.launchpad.net/keystone/+spec/oauth1-encrypted-access-keys
Whiteboard: upstream_milestone_none upstream_status_unknown upstream_definition_obsolete
Fixed In Version: Doc Type: Enhancement
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-03-19 17:26:28 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description RHOS Integration 2013-12-12 19:56:00 UTC
Cloned from launchpad blueprint https://blueprints.launchpad.net/keystone/+spec/oauth1-encrypted-access-keys.

Description:

Similar to the PKI tokens issued by keystone, encrypted OAuth access keys can contain enough information to allow offline:

- oauth-based request integrity validation
- openstack authorization data (tenancy & roles)

In pseudo code, to generate an access key:

    access_key = encrypt(secret_key + project_id + role_ids)

Given an oauth-signed request, an OpenStack service remote to keystone may verify an oauth-signed request by decrypting the access key provided by the client in plaintext:

    secret_key, project_id, role_ids = decrypt(access_key)

For a demo implementation, see:

  https://gist.github.com/dolph/6198529

Considerations:

- If the secret key is recoverable from the access key by a third party, then auth, request integrity, etc, is completely broken
- Access keys may be used in URL's (e.g. keystone's OS-OAUTH1 extension API), so length and encoding of the generated keys may impact compatibility

Specification URL (additional information):

None