def provider_features(self, pcr_class=ProviderConfigurationResponse): """ Specifies what the server capabilities are. :param pcr_class: :return: ProviderConfigurationResponse instance """ _provider_info = pcr_class(**CAPABILITIES) _claims = [] for _cl in SCOPE2CLAIMS.values(): _claims.extend(_cl) _provider_info["claims_supported"] = list(set(_claims)) _scopes = list(SCOPE2CLAIMS.keys()) _scopes.append("openid") _provider_info["scopes_supported"] = _scopes sign_algs = list(jws.SIGNER_ALGS.keys()) for typ in ["userinfo", "id_token", "request_object"]: _provider_info["%s_signing_alg_values_supported" % typ] = sign_algs # Remove 'none' for token_endpoint_auth_signing_alg_values_supported # since it is not allowed sign_algs = sign_algs[:] sign_algs.remove("none") _provider_info["token_endpoint_auth_signing_alg_values_supported"] = sign_algs algs = jwe.SUPPORTED["alg"] for typ in ["userinfo", "id_token", "request_object"]: _provider_info["%s_encryption_alg_values_supported" % typ] = algs encs = jwe.SUPPORTED["enc"] for typ in ["userinfo", "id_token", "request_object"]: _provider_info["%s_encryption_enc_values_supported" % typ] = encs # acr_values if self.authn_broker: acr_values = self.authn_broker.getAcrValuesString() if acr_values is not None: _provider_info["acr_values_supported"] = acr_values return _provider_info