Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 600
andycwk Avatar asked Jul 28 '15 11:07

andycwk


1 Answers

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]);
  };
like image 59
andycwk Avatar answered Dec 09 '22 10:12

andycwk