I don't know if double-colons can appear in one of these three ids.  I suggest either using json.dumps, or urllib.quote() the ids before using them in a string:
```
return ':'.join(urllib.quote(i) for i in (self.lti_id, self.get_resource_link_id(), self.get_user_id()))
```