Esempio n. 1
0
    def test_register_client(self):
        federation = Federation(TestOP.federation_key)

        rp_root_key = rsa_key()
        rp_intermediate_key = rsa_key()
        rp_signed_intermediate_key = JWS(
            json.dumps(rp_intermediate_key.serialize(private=False)), alg=rp_root_key.alg
        ).sign_compact(keys=[rp_root_key])
        rp_software_statement = federation.create_software_statement(
            dict(root_key=rp_root_key.serialize(private=False), response_types=["code"])
        )
        client_metadata = {
            "signing_key": rp_signed_intermediate_key,
            "signed_jwks_uri": "https://rp.example.com/signed_jwks",
            "software_statements": [rp_software_statement],
            "redirect_uris": ["https://rp.example.com"],
            "response_types": ["id_token"],
        }
        req = FederationRegistrationRequest(**client_metadata)
        signature = SignedHttpRequest(rp_intermediate_key).sign(rp_intermediate_key.alg, body=req.to_json())

        response = self.op.register_client("pop {}".format(signature), req.to_json())
        client_metadata = json.loads(response.message)
        registration_response = FederationRegistrationResponse().from_dict(client_metadata)
        assert registration_response.verify()
        assert "client_id" in registration_response
        assert registration_response["provider_software_statement"] == self.op.software_statements_jws[0]
        assert registration_response["response_types"] == ["code"]
Esempio n. 2
0
    def test_issued_software_statement_contains_kid(self):
        federation = Federation(self.signing_key)

        jws = federation.create_software_statement({})
        _jws = JWS()
        _jws.verify_compact(jws, keys=[self.signing_key])
        assert _jws.jwt.headers["kid"] == self.signing_key.kid
Esempio n. 3
0
    def test_accept_entity_with_common_federation(self):
        fed1_key = sym_key()
        federation = Federation(fed1_key)
        rp_software_statement = federation.create_software_statement({"foo": "bar"})
        op_software_statement = federation.create_software_statement({"abc": "xyz"})

        entity = OIDCFederationEntity(None, sym_key(), [rp_software_statement], [fed1_key], None)
        assert entity._verify_software_statements([op_software_statement])
Esempio n. 4
0
    def test_create_software_statement_reject_registration_with_missing_data(self):
        registration_data = {
            "foo": "bar"
        }
        required_attributes = {"xyz", "bar"}
        federation = Federation(self.signing_key, required_attributes=required_attributes)

        with pytest.raises(ValueError) as exc:
            federation.create_software_statement(registration_data)