def main():
    """Print out the JWT assertion."""
    signing_algorithm_str = 'RS256'  # RSA
    headers_str = jwk.base64url_encode(
        ordered_json_str({
            'alg': signing_algorithm_str,
            'kid': CONTENTS_DICT['private_key_id'],
            'typ': 'JWT',
        })
    )
    payload_str = jwk.base64url_encode(
        ordered_json_str({
            'aud': CONTENTS_DICT['token_uri'],
            'exp': TIMESTAMP + 3600,
            'iat': TIMESTAMP,
            'iss': CONTENTS_DICT['client_email'],
            'scope': SCOPE_STR,
        })
    )
    print(jws._sign_header_and_claims(  # pylint: disable=protected-access
        headers_str,
        payload_str,
        signing_algorithm_str,
        CONTENTS_DICT['private_key']
    ))
def main():
    """Print out the JWT assertion."""
    signing_algorithm_str = "RS256"  # RSA
    headers_str = jwk.base64url_encode(
        ordered_json_str({
            "alg": signing_algorithm_str,
            "kid": CONTENTS_DICT["private_key_id"],
            "typ": "JWT",
        }))

    payload_str_for_defaults = payload_str(SCOPE_STR)
    print("Assertion for default scope and no subject:")
    print(
        jws._sign_header_and_claims(  # pylint: disable=protected-access
            headers_str,
            payload_str_for_defaults,
            signing_algorithm_str,
            CONTENTS_DICT["private_key"],
        ))

    print()

    payload_str_for_nondefaults = payload_str(ALT_SCOPE_STR, "*****@*****.**")
    print("Assertion for non-default scope and using a subject:")
    print(
        jws._sign_header_and_claims(  # pylint: disable=protected-access
            headers_str,
            payload_str_for_nondefaults,
            signing_algorithm_str,
            CONTENTS_DICT["private_key"],
        ))
def payload_str(scopes, subject=None):
    payload_dict = {
        "aud": CONTENTS_DICT["token_uri"],
        "exp": TIMESTAMP + 3600,
        "iat": TIMESTAMP,
        "iss": CONTENTS_DICT["client_email"],
        "scope": scopes,
    }
    if subject:
        payload_dict["sub"] = subject
    return jwk.base64url_encode(ordered_json_str(payload_dict))