[Openid-specs-ab] RP testing

Mike Jones Michael.Jones at microsoft.com
Thu May 14 09:16:09 UTC 2015


On to the next challenge... :-)

Roland, could you send a note giving people instructions on how to get started on RP testing?  In particular, do you have a list of the RP tests currently implemented and URLs of the RP testing OPs that implement those tests?

				Cheers,
				-- Mike

-----Original Message-----
From: Openid-specs-ab [mailto:openid-specs-ab-bounces at lists.openid.net] On Behalf Of Roland Hedberg
Sent: Wednesday, March 25, 2015 4:03 AM
To: openid-specs-ab at lists.openid.net
Subject: [Openid-specs-ab] RP testing

On to the next challenge :-)

In order to do RP testing you either need a bunch of OP configured to work in slightly different ways or you need an OP that can change behavior on command.

I’ve chosen the later path.
I’ve constructed an OP that can be ’steered’ by crafting the URLs used in a special way.

The basic format of the path is:

/<id>/<signalg>/<encalg>/<errtype>/<claims>/<endpoint>

To start from the end:

endpoint
	is of course the different endpoints the OP presents (authorization/token/userinfo/..) claims
	is normal/aggregated/distributed
errtype
	this is errors the OP should perform. This is to make certain that the RP actually checks and
	understands what it receives. So far I’ve defined these errors:
	ath     the at_hash is incorrect
	aud     ID Token with invalid aud
	ch      the c_hash is incorrect
	iat     ID Token without iat claim
	idts    the id_token signature is invalid
	issi    the id_token iss value is not the same as the provider info issuer
	isso    the provider info issuer is not the same as the discovery url
	itsub   ID Token without sub claim
	kmm     signing/encryption with a key the RP doesn't have access to
	nonce   the nonce value returned is not the same as the received
	state   the state value returned is not the same as the received
encalg
	The encryption algorithms used, this is actually a tuple. The encryption alg
	and the encryption enc algorithms. The tuple are joined by a ':' so a typical
	value could be RSA1_5:A128CBC-HS256.
signalg
	Specifies which algorithm that the OP should use for signing JWTs, this algorithm
	is use for all signing. So it will for instance be used both for id_token and user
	info signing. A typical value would be RSA256.
id
	An identifier of the test run. This together with the IP address of the RP will
	be used to construct the filename in which the log of the test seen from the OP’s side
	will be stored.


So if you would want to test rp-idt-iat (Reject ID Token without iat claim) the path of the URL for the authorization endpoint could be:

/rp-idt-iat/_/_/iat/normal/authorization_endpoint

It’s obvious that testing a RP that does not support dynamic provider configuration will be very laborious with the above setup so I’ve worked with the assumption that all the RPs to test can read configuration from a .well-known/openid-configuration URL and understand it.

Now, Edmund Jay asked the question whether it would be possible to make it even simpler for the RP and just request it to know the test IDs and not construct the whole path.
And it can be done.

It would mean that the RP would read for example https://example.com/rp-idt-iat/.well-known/openid-configuration and the returned provider configuration would contain claims like this:

{
  ”authorization_endpoint”: "https://example.com/rp-idt-iat/_/_/iat/normal/authorize",
  ”token_endpoint”: ”https://example.com/rp-idt-iat/_/_/iat/normal/token”,
  …
}

Questions/comments ?

- Roland

"It is the consequence of humanity. We are all formed of frailty and error; let us pardon reciprocally each others’ folly - that is the first law of nature.” - Voltaire







More information about the Openid-specs-ab mailing list