genDpopToken function
Generate dPoP token for the authentication
Implementation
String genDpopToken(
String endPointUrl,
KeyPair rsaKeyPair,
dynamic publicKeyJwk,
String httpMethod,
) {
/// https://datatracker.ietf.org/doc/html/draft-ietf-oauth-dpop-03
/// Unique identifier for DPoP proof JWT
/// Here we are using a version 4 UUID according to https://datatracker.ietf.org/doc/html/rfc4122
var uuid = const Uuid();
final String tokenId = uuid.v4();
/// Initialising token head and body (payload)
/// https://solid.github.io/solid-oidc/primer/#authorization-code-pkce-flow
/// https://datatracker.ietf.org/doc/html/rfc7519
var tokenHead = {'alg': 'RS256', 'typ': 'dpop+jwt', 'jwk': publicKeyJwk};
var tokenBody = {
'htu': endPointUrl,
'htm': httpMethod,
'jti': tokenId,
'iat': (DateTime.now().millisecondsSinceEpoch / 1000).round(),
};
/// Create a json web token
final jwt = JWT(
tokenBody,
header: tokenHead,
);
/// Sign the JWT using private key
var dpopToken = jwt.sign(
RSAPrivateKey(rsaKeyPair.privateKey),
algorithm: JWTAlgorithm.RS256,
);
return dpopToken;
}