Let’s say I have an OpenID (extremeswank.com). I am paying for a software service at two websites: basecamphq.com and simplepaystubs.com. I log in to both sites regularly using my OpenID.
I want to be able to automatically transfer my time information from my account at basecamphq.com to my account at simplepaystubs.com. simplepaystubs.com, because it supports the Trusted Authentication Extension, offers the ability to log in to my account at basecamphq.com, and transfer the information automatically.
From then on, any time simplepaystubs.com needs data from basecamphq.com, it can log in automatically. Here’s what is basically does behind the scenes:
Everything, except specifying the OpenID and approving the connection, is done automatically, and requires no additional attention from me.
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [RFC2119] (Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” March 1997.).
User:
Also referred to as “End User” or “Subject”. A person with a digital identity who participates in OpenID-based identity information exchanges using their client software, typically a web browser.
OpenID Provider:
Also called “OP” or “Server”. An OpenID Authentication server on which a Relying Party relies for an assertion that the end user controls an Identifier.
Relying Party:
Also called “RP” or “Consumer”. A Web application that wants proof that the end user controls an Identifier.
Client Consumer
The OpenID Consumer that is requesting authentication access to data protected by the Destination Consumer.
Destination Consumer
The OpenID Consumer which is protecting access to data requested by the Client Consumer.
All OpenID Trusted Authentication messages MUST contain the following extension namespace declaration, as specified in the Extensions section of OpenID-Authentication-2.0:
openid.ns.<extension_alias>=http://extremeswank.com/specs/trustedauth/1.0
The actual extension namespace alias should be determined on a per-message basis by the party composing the messages, in such a manner as to avoid conflicts between multiple extensions. For the purposes of this document, the extension namespace alias for the Trusted Authentication service will be “trustedauth”.
The Trusted Authentication Extension is identified by the URI “http://extremeswank.com/specs/trustedauth/1.0” [NOTE: subject to change in following drafts]. This URI MUST be specified in the extension namespace declaration.
This extension is intended to fill the need for giving a site permission to access data stored at another site using a user’s OpenID. This is said to be “trusted”, because only the initial trust action is required to configure the requesting site (Client Consumer) to access the target site (Destination Consumer). From that point forward, the Client Consumer can access the Destination Consumer without user intervention.
This specification must be implemented by both the Client Consumer and the OpenID Provider. This system only provides the authentication framework, and does not specify how the user data should be exchanged between sites.
SSL must be used to exchange the authentication key, which is passed through the User Agent. For OPs that do not support this extension, the request will be handled like a normal OpenID authentication request.
The request parameters detailed here MUST be sent using the [OpenID.authentication‑2.0] (Recordon, D., Hoyt, J., Fitzpatrick, B., and D. Hardt, “OpenID Authentication 2.0 – Draft 11,” January 2007.) extension mechanism.
Discovery of the Trusted Authentication extension is achieved via the mechanism described in [OpenID.authentication‑2.0] (Recordon, D., Hoyt, J., Fitzpatrick, B., and D. Hardt, “OpenID Authentication 2.0 – Draft 11,” January 2007.). The Trusted Authentication namespace “http://extremeswank.com/specs/trustedauth/1.0” SHOULD be listed as an <xrd:Type> child element of the <xrd:Service> element in the XRDS discovery document.
The Trusted Authentication extension is based on the concept of “trusted connections”. A trusted connection gives one site permission to access the resources on another specific site, for a specific user account at that site.
Trusted connections are stored and managed at the OpenID Provider. A Consumer that wants access to an account at another site (the Client Consumer) will ask the OpenID Provider for permission to do so. If the request is approved by the user, the OpenID Provider will provide an authentication key (the shared secret) to this Consumer.
The shared secret is used whenever the Client Consumer wants to log in to the other site (the Destination Consumer). When prompted for credentials by the OpenID Provider, the Client Consumer will simply submit a hash of the authentication key to the OpenID Provider. The OpenID Provider will then approve the authentication request, and the Client Consumer will be logged in successfully to the Destination Consumer.
The OpenID Provider SHOULD provide the ability for the owner of the Identity to cancel or revoke any stored connection credentials. This will result in giving the user more control over their online security.
In this case, the Client Consumer will be acting as an OpenID Relying Party
In this case, the Client Consumer will be acting as an OpenID User Agent.
The Client Consumer will perform a normal “checkid_setup” request with the OpenID Provider, and supply the following additional arguments:
openid.ns.trustedauth
Value: “http://extremeswank.com/specs/trustedauth/1.0”
openid.trustedauth.mode
Value: “key_req”
openid.trustedauth.sourcename
Value: The name of requesting application
Example: ThisHost.com
openid.trustedauth.dest
Value: The login URL for the site
Example: http://www.destinationsite.com/openid_login.php
Note: The openid.return_to URL must be an HTTPS URL. If it is not, the OpenID Provider MUST immediately reject the request by returning a “openid.trustedauth.verified=false” response.
The OpenID Provider will provide a normal “id_res” response to the authentication request, and include the following additional arguments:
openid.ns.trustedauth
Value: “http://extremeswank.com/specs/trustedauth/1.0”
openid.trustedauth.mode
Value: “key_res”
openid.trustedauth.verified
Value: true if successful, false if not. If this argument is not present, the Client Consumer MUST assume that the OpenID Provider does not support this extension.
openid.trustedauth.dest
Value: http://www.destinationsite.com/openid_login.php
openid.trustedauth.secret
Value: The shared secret in BASE64 format. MUST return a blank value if openid.trustedauth.verified is false.
Client Consumer provides identifier to destination consumer per OpenID Authentication specification. Passing this identifier is out of the scope of this specification.
The Destination Consumer will initiate a normal “checkid_setup” request with the OpenID Provider. The Client Consumer will act as the User Agent. OpenID Provider MUST provide the following HTTP header in its response to the Client Consumer:
X-OPENID-AuthenticationHash: [HASHCODE]
X-OPENID-AuthenticationSupported: [URIs]
Where [HASHCODE] is a Base64-encoded random value that can optionally be used to generate a SHA-256 hash of the verification key. The OpenID Provider should cache this value for a short period (less than 60 seconds), and expire the value once an authentication request has been submitted using that value. This is intended to protect against replay attacks.
Where [URIs] is a space-delimited list of the Extension namespaces that are supported for automated authentication. The namespace of this Extension must be present in the list. If the namespace URI is not present, the Client Consumer MUST assume that the OpenID Provider does not support this extension.
Client Consumer will submit the following arguments to the current URL at the OpenID Provider, being sure to include any pre-existing Query String arguments:
openid.ns.trustedauth
Value: “http://extremeswank.com/specs/trustedauth/1.0”
openid.trustedauth.mode
Value: “proxyauth”
openid.trustedauth.hashcode
Value: Verbatim, the hashcode received from the OpenID Provider
openid.trustedauth.secret_hash
Value: SHA-256 hash of the shared secret and the hashcode
The OpenID Provider will provide a normal “id_res” response to the authentication request, and include the following additional arguments:
openid.ns.trustedauth
Value: “http://extremeswank.com/specs/trustedauth/1.0”
openid.trustedauth.mode
Value: “proxyauth”
Note: This is a courtesy notification to the Destination Consumer that this authentication request is a trusted connection, and not a request directly requested by an end-user.
Please take the following security notes into account:
| [OpenID.authentication-2.0] | Recordon, D., Hoyt, J., Fitzpatrick, B., and D. Hardt, “OpenID Authentication 2.0 – Draft 11,” January 2007 (TXT, HTML). |
| [RFC2119] | Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” BCP 14, RFC 2119, March 1997 (TXT, HTML, XML). |