'Return only those claims that are asked for.
It\'s a best effort task; if essential claims are not present
no error is flagged.
:param userinfo: A dictionary containing the available user info.
:param user_info_claims: A dictionary specifying the asked for claims
:return: A dictionary of filtered claims.'

@staticmethod
def filter(userinfo, user_info_claims=None):

    if (user_info_claims is None):
        return copy.copy(userinfo)
    else:
        result = {}
        missing = []
        optional = []
        for (key, restr) in user_info_claims.items():
            try:
                result[key] = userinfo[key]
            except KeyError:
                if (restr == {'essential': True}):
                    missing.append(key)
                else:
                    optional.append(key)
        return result
