Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Core 1.4: "dynamic_client_endpoint - OPTIONAL. The endpoint to use for performing dynamic client registration. Usage is defined by [DynClientReg]. The presence of this property indicates authorization server support for the dynamic client registration feature and its absent indicates a lack of support."
  • Core 2: "It is OPTIONAL for the client credentials to be provided dynamically through [DynClientReg]); alternatively, they MAY use a static process."

Issues

  1. Typo in Core Sec 1.4: s/absent/absence/
Test IDTypeRoleDescriptionSuccess
FT-as-dyn-client-regoptASAS config data "dynamic_client_endpoint" property is non-nullAS config data "dynamic_client_endpoint" property has a valid URL value for a DynClientReg endpoint
FT-rs-get-dyn-client-credsoptRSRS interacts with AS to request and receive client credentials dynamicallyRS gets client credentials dynamically
FT-c-get-dyn-client-credsoptCC interacts with AS to request and receive client credentials dynamicallyC gets client credentials dynamically

...

  • Core 1.3.2: "The resource server presents one or more protected resource endpoints to the client; these endpoints are protected by the UMA profile of OAuth and require a requesting party token (RPT) with sufficient authorization data for access." (non-normative)
  • Core 1.3.2: "This specification defines one RPT profile, call "bearer" (see Section 3.3.2), which is REQUIRED for the authorization server to support."
  • Core 2: "Once a resource set has been placed under authorization server protection through the registration of a resource set description for it, and until such a description's deletion by the resource server, the resource server MUST limit access to corresponding resources, respecting authorization data associated with client-presented RPTs by the authorization server as appropriate."
  • Core 3: "Each interaction (as part of getting authorization and access a resource) MAY be the last, if the client chooses not to continue pursuing the access attempt or the resource server chooses not to continue facilitating it."
  • Core 3.1.1: "If the client does not present an RPT with the request, the resource server MUST return an HTTP 401 (Unauthorized) status code, along with providing the authorization server's URI in an "as_uri" property to facilitate authorization server configuration data discovery, including discovery of the endpoint where the client can request an RPT."
  • Core 3.1.2: "If the client presents an RPT with its request, the resource server MUST determine the RPT's status (see Section 3.3) before responding. If the RPT is invalid, the resource server MUST return an HTTP 401 (Unauthorized) status code, along with providing the authorization server's URI in an "as_uri" property in the header, similarly to the case where no RPT was presented."
  • Core 3.1.2: "If the RPT is valid but has insufficient authorization data for the type of access sought, the resource server SHOULD register a requested permission with the authorization server that would suffice for that scope of access (see Section 3.2), and then respond with the HTTP 403 (Forbidden) status code, along with providing the authorization server's URI in an "as_uri" property in the header, and the permission ticket it just received from the AM in the body in a JSON-encoded "ticket" property."
  • Core 3.1.2: "If the RPT's status is associated with authorization data that is consistent with authorized access of the scope sought by the client, the resource server MUST give access to the desired resource."
  • Core 3.1.2: "The resource server MUST NOT give access where the token's status is not associated with sufficient authorization data for the attempted scope of access."
  • Core 3.2: "The (permission) ticket value MUST be securely random (for example, not merely part of a predictable sequential series), to avoid denial-of-service attacks."
  • Core 3.2: "If the registration request is successful, the authorization server responds with an HTTP 201 (Created) status code and includes the Location header in its response as well as the "ticket" property in the JSON-formatted body."
  • Core 3.2: "If the registration request is authenticated properly but fails due to other reasons, the authorization server responds with an HTTP 400 (Bad Request) status code and includes one of the following UMA error codes..."
  • Core 3.3.2: "On receiving an RPT of the "Bearer" type in an authorization header from a client making an access attempt, the resource server MUST introspect the token by using the authorization server's token introspection endpoint. ... The authorization server responds with a JSON object with the structure dictated by [OAuth-introspection]."
  • Core 3.4.1: "It (client) obtains an RPT by performing a POST on the RPT endpoint. ... The authorization server responds with an HTTP 201 (Created) status code and provides a new RPT."
  • Core 3.4.1: "If the AAT provided in the header is the same as one provided for a previously issued still-valid RPT by this authorization server, the authorization server invalidates the old RPT and issues a new one."
  • Core 3.4.2: "It (client) performs a POST on the authorization request endpoint, supplying its own AAT in the header and its RPT and the permission ticket in a JSON object with properties "rpt" and ticket", respectively."
  • Core 3.4.2: "The authorization server MUST base the addition of authorization data to RPTs on user policies."

Issues

  1. Break down these feature tests into smaller chunks? What makes sense? The list of supporting clauses will be huge once we fill it in. Some candidates: MTI "bearer" RPT support vs. other profiles.
  2. "User policies" isn't testable; how do we shore up this wording in FT-as-give-authz-data?
  3. Need more rptbearer-specific tests?
  4. Add claimoidc-specific tests?
  5. Add optasc-specific tests?
  6. Regarding FT-rs-respect-authz-data: Is this truly a testable assertion, or is it in the realm of Binding Obs? Doublecheck what language we really have in the current spec about this need for "respecting" permissions. See Section 2 of the Core spec.
  7. Regarding FT-asrs-issueintrospect-rpt: Is it too implementation-specific that the spec says that "If the AAT provided in the header is the same as one provided for a previously issued still-valid RPT by this authorization server, the authorization server invalidates the old RPT and issues a new one." in Section 3.4.1? The AS could instead have refreshed the same RPT that had expired and give it back.Regarding FT-rs-introspect-rpt: The client currently has no way of knowing if the RPT is about to expire, and it  The client currently has no way of knowing if the RPT is about to expire, and it could be more efficient if it could look this up through token introspection. Should we consider this for the spec?
  8. Regarding FT-rs-register-permission and FT-as-permissionoidc-ticket: Can the RS register a whole bunch of permissions at the same time?Regarding FT-as-oidc-client: This is sort of client: This is sort of an implicit callout to the OpenID Connect interop tests. Do we even need this? Is anyone planning to test this for UMA1? See Section 3.5.1.1 for the list of things an AS has to do to conform to this claim profile.We have a new philosophical question: Even if the AS=C optimization profile is in use, is it mandatory-to-implement for the AS to present real and functional HTTPS endpoints for clients that "aren't it" (the same system entity) to use? If so, our various "req" feature tests below are true. If not, do we make them "opt" and "non-optim-asc" (the inverse of "optim-asc")? In any case, we should be sure to explicitly list the MUSTs that get turned off in this profile (and other such profiles). Maciej is thinking we may, after all, want to put health warnings next to each MUST – it might not be that onerous, and we will have done all the work anyway! Spec readers would otherwise be challenged.
Test IDTypeRoleDescriptionSuccess
FT-unprotected-resourcereqRSRS responds to access request for unprotected or otherwise non-UMA-protected resource without including anything UMA-specific in the responseRS responds in non-UMA fashion
FT-rs-no-rptreqRSRS responds to client not bearing an RPT with HTTP 401 and correct as_uri corresponding to AS protecting the resource to which access was attemptedRS responds with HTTP 401 and as_uri
FT-c-get-rptreqCClient presents valid AAT at AS's RPT endpoint to get RPTClient qualifies for and gets new or refreshed RPT
FT-as-issue-rptreqASAS issues RPT in response to client's request for an RPT at the correct endpoint with a valid AAT; if an existing RPT associated with this AAT was still valid, it is invalidated when the new RPT is issued (see above for issue)AS issues RPT
FT-c-rptreqCC requests access to a resource with an RPT 
FT-rs-introspect-rptreq, rpt-bearerRSRS presents a valid RPT at AS's token introspection endpoint to get token's status (see above for issue)RS gets well-formed RPT status
FT-as-introspect-rptreqASAS returns RPT's status in response to RS requestAS returns well-formed RPT status
FT-rs-invalid-rptreqRSRS responds to client bearing an invalid RPT with HTTP 401 and correct as_uri corresponding to AS protecting the resource to which access was attemptedRS responds with HTTP 401 and as_uri
FT-rs-register-permissionreqRSRS presents a valid PAT at AS's permission registration endpoint to register a requested permission that is relevant for the type of access attempted by client (see above issue)RS registers requested permission
FT-as-permission-ticketreqASAS registers permission associated with correct resource owner and resource set and returns securely random permission ticket in response to RS registration of requested permission (see above issue)AS returns permission ticket that is securely random
FT-rs-insufficient-permsreq, rpt-bearerRSRS responds to client bearing a valid "bearer" profile RPT that has insufficient permissions with HTTP 403, as_uri, and permission ticket corresponding to resource for which access was attemptedRS responds with HTTP 403, as_uri, and permission ticket
FT-c-add-authz-datareqCClient presents valid AAT, valid RPT, and permission ticket at AS's authorization endpoint to POST request that authorization data be associated with RPTClient receives back normal success or error message
FT-as-deny-authz-datareqASAS determines that the client should not get authorization data, and returns either an invalid_ticket error, an expired_ticket error, or a not_authorized_permission errorAS returns one of the errors
FT-as-give-authz-datareqASAS associates new authorization data with the RPT that the client presented and responds with successAS adds authorization data and responds with success
FT-as-need-claimsreq, rptbearerASAS indicates it needs requesting party claims to considering adding permission to "bearer" profile RPTAS responds to the client with a need_claims error
FT-c-claims-redirectreq, humanrqpCClient redirects human requesting party to AS to provide claims, providing whatever data is required by the selected claim profileAS redirects requesting party to AS
FT-as-oidc-clientopt, claim-oidcASAS correctly acts as OpenID Connect relying party as defined by the OpenID Connect claim profileAS acts correctly?
FT-rs-respect-authz-datareqRSRS limits access to resource that is currently under protection at an AS for which a valid RPT with valid authorization data has not been presented by a clientRS blocks and grants client's access according to RPT's current status