class ShiroAuthToken implements AuthenticationToken {

    @Override
    public String toString()
    {
        if ( authToken.isEmpty() )
        {
            return "{}";
        }

        List<String> keys = new ArrayList<>( authToken.keySet() );
        int schemeIndex = keys.indexOf( AuthToken.SCHEME_KEY );
        if ( schemeIndex > 0 )
        {
            keys.set( schemeIndex, keys.get( 0 ) );
            keys.set( 0, AuthToken.SCHEME_KEY );
        }

        return keys.stream()
                .map( this::keyValueString )
                .collect( joining( PAIR_DELIMITER, "{ ", " }" ) );
    }

    public  ShiroAuthToken( Map<String,Object> authToken );

}