oidcCreateRequestObject function

String oidcCreateRequestObject({
  1. required Map<String, dynamic> parameters,
  2. required JsonWebKey key,
  3. required String algorithm,
  4. required String issuer,
  5. required String audience,
  6. Duration lifetime = const Duration(minutes: 5),
  7. Duration clockSkew = Duration.zero,
  8. Random? random,
})

Builds a signed JWT-Secured Authorization Request object (RFC 9101 §4) from the authorization parameters.

The returned compact JWS is the value of the request authorization parameter. iss is set to the client_id and aud to the authorization server (its issuer), per RFC 9101 §6.1; iat/exp/jti are added. The typ header is oauth-authz-req+jwt (RFC 9101 §10.8).

Implementation

String oidcCreateRequestObject({
  required Map<String, dynamic> parameters,
  required JsonWebKey key,
  required String algorithm,
  required String issuer,
  required String audience,
  Duration lifetime = const Duration(minutes: 5),
  Duration clockSkew = Duration.zero,
  Random? random,
}) {
  final now = clock.now();
  final claims = <String, dynamic>{
    ...parameters,
    'iss': issuer,
    'aud': audience,
    'jti': oidcGenerateRequestObjectJti(random),
    'iat': now.subtract(clockSkew).millisecondsSinceEpoch ~/ 1000,
    'nbf': now.subtract(clockSkew).millisecondsSinceEpoch ~/ 1000,
    'exp': now.add(lifetime).millisecondsSinceEpoch ~/ 1000,
  };
  return (JsonWebSignatureBuilder()
        ..jsonContent = claims
        ..setProtectedHeader('typ', 'oauth-authz-req+jwt')
        ..addRecipient(key, algorithm: algorithm))
      .build()
      .toCompactSerialization();
}