Search code examples
servicestackservicestack-textidentityserver3

Problems de-serializing System.Security.Claims.Claim


I'm implementing an oAuth server and need to store refresh tokens, to do this I have (at the moment) chosen to serialize the tokens into JSON.

While I can see that the JSON includes everything that would be needed to rehydrate, when I de-serialize with token.FromJson() the embedded claims are not being reconstructed correctly.

So far I've considered inheriting from JsonConverter to create a claims converter but don't see a way of adjusting the global JsConfig to utilise it :(

Can any one point me in a good direction?


Solution

  • So...

    Walking away from the code and returning did the trick!

    Instead of using a JsonConverter you need to utilise a generic version of JsConfig when changing/overriding the behaviour of ServiceStack on a specific class, just stick the following in your services start-up code for example.

    JsConfig<Claim>.SerializeFn = claim => string.Format("{0}|{1}", claim.Type, claim.Value);
    
    JsConfig<Claim>.DeSerializeFn = claimDetails =>
      {
        var values = claimDetails.Split('|');
        return new Claim(values[0], values[1]);
      };